dev*_*per 2 c linux multithreading
我有2个线程来创建thread1和thread2.创建线程时:
pthread_create(&thread1, NULL, &function_th1, NULL);
pthread_create(&thread2, NULL, &function_th2, NULL);
Run Code Online (Sandbox Code Playgroud)
thread2在thread1之前启动,我正在寻找在thread2之前启动thread1的解决方案.
不寻找这个解决方案:
pthread_create(&thread2, NULL, &function_th2, NULL);
pthread_create(&thread1, NULL, &function_th1, NULL);
Run Code Online (Sandbox Code Playgroud)
发出线程创建调用和线程实际开始执行之间没有关系.这一切都取决于实现,操作系统等,这就是为什么你看到两个线程实际上以看似随机的顺序开始的原因.
如果需要线程1在线程2之前启动,则可能对某些事件具有某些数据/逻辑依赖性.在这种情况下,您应该使用条件变量来告诉线程2何时实际开始执行.
// condition variable
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
// associated mutex
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
// state for condition variable
int shouldWait = 1;
...
void* function_th1(void* p) {
// execute something
// signal thread 2 to proceed
pthread_mutex_lock(&mutex);
shouldWait = 0;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
// other stuff
}
void* function_th2(void* p) {
// wait for signal from thread 1
pthread_mutex_lock(&mutex);
while(shouldWait) {
pthread_cond_wait(&cond, &mutex);
}
pthread_mutex_unlock(&mutex);
// other stuff
}
Run Code Online (Sandbox Code Playgroud)