文章图片
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