多线程发布安排

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)

Tud*_*dor 5

发出线程创建调用和线程实际开始执行之间没有关系.这一切都取决于实现,操作系统等,这就是为什么你看到两个线程实际上以看似随机的顺序开始的原因.

如果需要线程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)