/* ============================================================================= * thread_startup * -- Create pool of secondary threads * -- numThread is total number of threads (primary + secondaries) * ============================================================================= */ void thread_startup (long numThread) { long i; global_numThread = numThread; global_doShutdown = FALSE; /* Set up barrier */ assert(global_barrierPtr == NULL); global_barrierPtr = THREAD_BARRIER_ALLOC(numThread); assert(global_barrierPtr); THREAD_BARRIER_INIT(global_barrierPtr, numThread); #ifdef MAP_USE_TFAVLTREE #ifdef SEPERATE_MAINTENANCE thread_done = (bool_t *)malloc((numThread -4) * sizeof(bool_t)); for(i = 0; i < numThread -4; i++) { thread_done[i] = FALSE; } /* assert(global_barrierPtr2 == NULL); */ /* global_barrierPtr2 = THREAD_BARRIER_ALLOC(numThread-4); */ /* assert(global_barrierPtr2); */ /* THREAD_BARRIER_INIT(global_barrierPtr2, numThread-4); */ /* assert(global_barrierPtr3 == NULL); */ /* global_barrierPtr3 = THREAD_BARRIER_ALLOC(4); */ /* assert(global_barrierPtr3); */ /* THREAD_BARRIER_INIT(global_barrierPtr3, 4); */ #endif #endif /* Set up ids */ THREAD_LOCAL_INIT(global_threadId); assert(global_threadIds == NULL); global_threadIds = (long*)malloc(numThread * sizeof(long)); assert(global_threadIds); for (i = 0; i < numThread; i++) { global_threadIds[i] = i; } /* Set up thread list */ assert(global_threads == NULL); global_threads = (THREAD_T*)malloc(numThread * sizeof(THREAD_T)); assert(global_threads); /* Set up pool */ THREAD_ATTR_INIT(global_threadAttr); for (i = 1; i < numThread; i++) { THREAD_CREATE(global_threads[i], global_threadAttr, &threadWait, &global_threadIds[i]); } /* * Wait for primary thread to call thread_start */ }
/* ============================================================================= * thread_startup * -- Create pool of secondary threads * -- numThread is total number of threads (primary + secondaries) * ============================================================================= */ void thread_startup (long numThread) { long i; totalThreads = numThread; global_numThread = numThread; global_doShutdown = FALSE; /* Set up barrier */ assert(global_barrierPtr == NULL); global_barrierPtr = THREAD_BARRIER_ALLOC(numThread); assert(global_barrierPtr); THREAD_BARRIER_INIT(global_barrierPtr, numThread); /* Set up ids */ THREAD_LOCAL_INIT(global_threadId); assert(global_threadIds == NULL); global_threadIds = (long*)malloc(numThread * sizeof(long)); assert(global_threadIds); for (i = 0; i < numThread; i++) { global_threadIds[i] = i; } /* Set up thread list */ assert(global_threads == NULL); global_threads = (THREAD_T*)malloc(numThread * sizeof(THREAD_T)); assert(global_threads); threadArgsArr = (thread_args_t*) malloc(numThread * sizeof(thread_args_t)); threadArgsArr[0].aborts = 0; threadArgsArr[0].commits = 0; threadArgsArr[0].threadId = global_threadIds[0]; /* Set up pool */ THREAD_ATTR_INIT(global_threadAttr); for (i = 1; i < numThread; i++) { threadArgsArr[i].aborts = 0; threadArgsArr[i].commits = 0; threadArgsArr[i].threadId = global_threadIds[i]; THREAD_CREATE(global_threads[i], global_threadAttr, &threadWait, &(threadArgsArr[i])); } /* * Wait for primary thread to call thread_start */ }
/* ============================================================================= * thread_startup * -- Create pool of secondary threads * -- numThread is total number of threads (primary + secondaries) * ============================================================================= */ void thread_startup (long numThread) { long i; global_numThread = numThread; global_doShutdown = FALSE; /* Set up barrier */ assert(global_barrierPtr == NULL); global_barrierPtr = THREAD_BARRIER_ALLOC(numThread); assert(global_barrierPtr); THREAD_BARRIER_INIT(global_barrierPtr, numThread); /* Set up ids */ THREAD_LOCAL_INIT(global_threadId); assert(global_threadIds == NULL); global_threadIds = (long*)malloc(numThread * sizeof(long)); assert(global_threadIds); for (i = 0; i < numThread; i++) { global_threadIds[i] = i; } /* Set up thread list */ assert(global_threads == NULL); global_threads = (THREAD_T*)malloc(numThread * sizeof(THREAD_T)); assert(global_threads); /* Set up pool */ for (i = 1; i < numThread; i++) { THREAD_ATTR_T attr; THREAD_ATTR_INIT(attr); pthread_attr_init(&attr); pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM); THREAD_CREATE(global_threads[i], attr, &threadWait, &global_threadIds[i]); } /* * Wait for primary thread to call thread_start */ }
/* ============================================================================= * thread_startup * -- Create pool of secondary threads * -- numThread is total number of threads (primary + secondaries) * ============================================================================= */ void thread_startup (long numThread) { int i; global_numThread = numThread; global_doShutdown = FALSE; /* Set up barrier */ assert(global_barrierPtr == NULL); global_barrierPtr = THREAD_BARRIER_ALLOC(numThread); assert(global_barrierPtr); THREAD_BARRIER_INIT(global_barrierPtr, numThread); /* Set up ids */ THREAD_LOCAL_INIT(global_threadId); assert(global_threadIds == NULL); global_threadIds = (long*)malloc(numThread * sizeof(long)); assert(global_threadIds); for (i = 0; i < numThread; i++) { global_threadIds[i] = i; } /* Set up thread list */ assert(global_threads == NULL); global_threads = (THREAD_T*)malloc(numThread * sizeof(THREAD_T)); assert(global_threads); //writers_lock.value = 0; /* Set up pool */ THREAD_ATTR_INIT(global_threadAttr); for (i = 1; i < numThread; i++) { THREAD_CREATE(global_threads[i], global_threadAttr, &threadWait, &global_threadIds[i]); } }