The FIRSTPRIVATE clause provides a superset of the functionality provided by the PRIVATE clause (see Section 15.2.2.5); objects are declared PRIVATE and they are initialized with certain values. It takes the following form:
Variables that appear in a FIRSTPRIVATE list are subject to PRIVATE clause semantics. In addition, private (local) copies of each variable in the different threads are initialized to the value the variable had before the parallel region started.