C多线程|C多线程 队列

C多线程|C多线程 队列
文章图片
join,detach
thread::join(): 阻塞当前线程,直至 this 所标识的线程完成其执行。this 所标识的线程的完成同步于从 join() 的成功返回。
该方法简单暴力,主线程等待子进程期间什么都不能做。thread::join()会清理子线程相关的内存空间,此后thread object将不再和这个子线程相关了,即thread object不再joinable了,所以join对于一个子线程来说只可以被调用一次,为了实现更精细的线程等待机制,可以使用条件变量等机制。
thread::detach(): 从 thread 对象分离执行的线程,允许执行独立地持续。一旦线程退出,则释放所有分配的资源。调用 detach 后, *this 不再占有任何线程。

#include #include #include #include 【C多线程|C多线程 队列】#include pthread_mutex_t mut; int i=0; void print_num() { while(1) { pthread_mutex_lock(&mut); i++; pthread_mutex_unlock(&mut); if(i<1000) {printf("%d\n",i); } else break; sleep(1); }}void print_str() { while(1) { pthread_mutex_lock(&mut); i++; pthread_mutex_unlock(&mut); if(i<1000) { printf("---%d\n",i); } else break; sleep(1); } }int main() { pthread_t t1,t2; pthread_mutex_init(&mut,NULL); printf("create\n"); int temp; pthread_create(&t2,NULL,(void *)print_str,NULL); pthread_detach(t2); if((temp=pthread_create(&t1,NULL,(void *)print_num,NULL))!=0) printf("1 failed\n"); pthread_join(t1,NULL); return 0; }//build :gcc test_thread.c -o test_thread.o -pthread

    推荐阅读