- park()可以让调用线程休眠
- unpark(tid)可以唤醒tid标识的线程
- setpark()可以使线程从park直接返回(其他线程调用unpark后)
- Linux系统里提供futex实现类似机制
为什么我们需要条件变量
void* child(void* arg){
printf("child\n");
// XXX how to indicate we are done?
return NULL;
}
int main(int argc, char* argv[]){
printf("parent: begin\n");
pthread_t c;
pthread_create(&c, NULL, child, NULL); // create child
// xxx how to wait for child?
printf("parent: end\n");
return 0;
}
一种低效的实现
volatile int done = 0;
void* child(void* arg){
printf("child\n");
done = 1;
return NULL;
}
int main(int argc, char* argv[]){
printf("parent: begin\n");
pthread_t c;
pthread_create(&c, NULL, child, NULL); // create child
while(done == 0)
; // spin
printf("parent: end\n");
return 0;
}
目的:判断A是否执行完,A执行完后B才能执行

说些什么吧!