C++ 线程join和detach

# include
# include
//C++里处理多线程的头文件是thread
using namespace std;
pthread_mutex_t flock=PTHREAD_MUTEX_INITIALIZER;
//初始化互斥锁,互斥锁只能同时被一个对象访问,如果同时有两个对访问,其中一个会被阻塞
void hello(char c)
{

    for(int i=0;i<100;i++) {
        pthread_mutex_lock(&flock);//上锁
        cout << c << " " << i << endl;
        pthread_mutex_unlock(&flock);//解锁
    }
}
int main()
{
    thread t0 (hello,'a');
    thread t1 (hello,'b');
    t0.join();
    t1.join();
    //t0.detach();
    //t1.detach();  
}

(1)当使用join()函数时,主调线程(main函数里有一个主调线程)阻塞,等待被调线程终止,然后主调线程回收被调线程资源,并继续运行;上面这段话的意思就是,使用join(),线程运行完,main函数才能结束。
(2)当使用detach()函数时,主调线程继续运行,被调线程驻留后台运行,主调线程无法再取得该被调线程的控制权。当主调线程结束时,由运行时库负责清理与被调线程相关的资源。上面这段话的意思就是,使用detach(),main函数不用等待线程结束才能结束。有时候线程还没运行完,main函数就已经结束了。

你可能感兴趣的:(C++ 线程join和detach)