Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Specifies that each thread should have its own instance of a variable.
private(var)
Remarks
where,
- var
The variable to have instances in each thread.
Remarks
private applies to the following directives:
For more information, see 2.7.2.1 private.
Example
// openmp_private.c
// compile with: /openmp
#include <windows.h>
#include <assert.h>
#include <stdio.h>
#include <omp.h>
#define NUM_THREADS 4
#define SLEEP_THREAD 1
#define NUM_LOOPS 2
enum Types {
ThreadPrivate,
Private,
FirstPrivate,
LastPrivate,
Shared,
MAX_TYPES
};
int nSave[NUM_THREADS][MAX_TYPES][NUM_LOOPS] = {{0}};
int nThreadPrivate;
#pragma omp threadprivate(nThreadPrivate)
#pragma warning(disable:4700)
int main() {
int nPrivate = NUM_THREADS;
int nFirstPrivate = NUM_THREADS;
int nLastPrivate = NUM_THREADS;
int nShared = NUM_THREADS;
int nRet = 0;
int i;
int j;
int nLoop = 0;
nThreadPrivate = NUM_THREADS;
printf_s("These are the variables before entry "
"into the parallel region.\n");
printf_s("nThreadPrivate = %d\n", nThreadPrivate);
printf_s(" nPrivate = %d\n", nPrivate);
printf_s(" nFirstPrivate = %d\n", nFirstPrivate);
printf_s(" nLastPrivate = %d\n", nLastPrivate);
printf_s(" nShared = %d\n\n", nShared);
omp_set_num_threads(NUM_THREADS);
#pragma omp parallel copyin(nThreadPrivate) private(nPrivate) shared(nShared) firstprivate(nFirstPrivate)
{
#pragma omp for schedule(static) lastprivate(nLastPrivate)
for (i = 0 ; i < NUM_THREADS ; ++i) {
for (j = 0 ; j < NUM_LOOPS ; ++j) {
int nThread = omp_get_thread_num();
assert(nThread < NUM_THREADS);
if (nThread == SLEEP_THREAD)
Sleep(100);
nSave[nThread][ThreadPrivate][j] = nThreadPrivate;
nSave[nThread][Private][j] = nPrivate;
nSave[nThread][Shared][j] = nShared;
nSave[nThread][FirstPrivate][j] = nFirstPrivate;
nSave[nThread][LastPrivate][j] = nLastPrivate;
nThreadPrivate = nThread;
nPrivate = nThread;
nShared = nThread;
nLastPrivate = nThread;
--nFirstPrivate;
}
}
}
for (i = 0 ; i < NUM_LOOPS ; ++i) {
for (j = 0 ; j < NUM_THREADS ; ++j) {
printf_s("These are the variables at entry of "
"loop %d of thread %d.\n", i + 1, j);
printf_s("nThreadPrivate = %d\n",
nSave[j][ThreadPrivate][i]);
printf_s(" nPrivate = %d\n",
nSave[j][Private][i]);
printf_s(" nFirstPrivate = %d\n",
nSave[j][FirstPrivate][i]);
printf_s(" nLastPrivate = %d\n",
nSave[j][LastPrivate][i]);
printf_s(" nShared = %d\n\n",
nSave[j][Shared][i]);
}
}
printf_s("These are the variables after exit from "
"the parallel region.\n");
printf_s("nThreadPrivate = %d (The last value in the "
"master thread)\n", nThreadPrivate);
printf_s(" nPrivate = %d (The value prior to "
"entering parallel region)\n", nPrivate);
printf_s(" nFirstPrivate = %d (The value prior to "
"entering parallel region)\n", nFirstPrivate);
printf_s(" nLastPrivate = %d (The value from the "
"last iteration of the loop)\n", nLastPrivate);
printf_s(" nShared = %d (The value assigned, "
"from the delayed thread, %d)\n\n",
nShared, SLEEP_THREAD);
}
These are the variables before entry into the parallel region. nThreadPrivate = 4 nPrivate = 4 nFirstPrivate = 4 nLastPrivate = 4 nShared = 4 These are the variables at entry of loop 1 of thread 0. nThreadPrivate = 4 nPrivate = 1310720 nFirstPrivate = 4 nLastPrivate = 1245104 nShared = 3 These are the variables at entry of loop 1 of thread 1. nThreadPrivate = 4 nPrivate = 4488 nFirstPrivate = 4 nLastPrivate = 19748 nShared = 0 These are the variables at entry of loop 1 of thread 2. nThreadPrivate = 4 nPrivate = -132514848 nFirstPrivate = 4 nLastPrivate = -513199792 nShared = 4 These are the variables at entry of loop 1 of thread 3. nThreadPrivate = 4 nPrivate = 1206 nFirstPrivate = 4 nLastPrivate = 1204 nShared = 2 These are the variables at entry of loop 2 of thread 0. nThreadPrivate = 0 nPrivate = 0 nFirstPrivate = 3 nLastPrivate = 0 nShared = 0 These are the variables at entry of loop 2 of thread 1. nThreadPrivate = 1 nPrivate = 1 nFirstPrivate = 3 nLastPrivate = 1 nShared = 1 These are the variables at entry of loop 2 of thread 2. nThreadPrivate = 2 nPrivate = 2 nFirstPrivate = 3 nLastPrivate = 2 nShared = 2 These are the variables at entry of loop 2 of thread 3. nThreadPrivate = 3 nPrivate = 3 nFirstPrivate = 3 nLastPrivate = 3 nShared = 3 These are the variables after exit from the parallel region. nThreadPrivate = 0 (The last value in the master thread) nPrivate = 4 (The value prior to entering parallel region) nFirstPrivate = 4 (The value prior to entering parallel region) nLastPrivate = 3 (The value from the last iteration of the loop) nShared = 1 (The value assigned, from the delayed thread, 1)