C多线程 队列

C多线程 队列_第1张图片

join,detach

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

#include 
#include 
#include 
#include 
#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

你可能感兴趣的:(C多线程 队列)