pthread 简要使用指南(二) joinable 与 detached
pthread_craete()出来的线程,joinable或detached两者必占之一。
如果是jionale的线程,那么必须使用pthread_join()等待线程结束,否则线程所占用的资源不会得到释放,会造成资源泄露。如果想创建一个线程,但又不想使用pthread_join()等待该线程结束,那么可以创建一个detached的线程。detached状态的线程,在结束的时候,会自动释放该线程所占用的资源。detached不需要,也不能使用pthread_join()来等待线程结束。
另外,一个jionale线程,只能有一个pthread_jion()来等待结束,如果有多个,则只有第一个执行到的有效,其他的都会直接返回,具体错误信息由pthread_join()函数的返回值返回。
上代码,主要是joinable及detached状态线程的创建,同一线程多个pthread_join(),pthread_join()一个detached线程:
运行结果:new thread thr_joinablefn begin pid 2352 tid 4981312 (0x4c0240)new thread thr_detachedfn begin pid 2352 tid 5047072 (0x4d0320)new thread thr_joinablefn: pid 2352 tid 4981312 (0x4c0240)can't pthread_join ntid_joinable thread in thr_detachedfn :Invalid argumentthr_joinablefn runing 0new thread thr_detachedfn: pid 2352 tid 5047072 (0x4d0320)thr_detachedfn runing 1thr_joinablefn runing 2thr_detachedfn runing 3thr_joinablefn runing 4thr_detachedfn runing 5thr_joinablefn runing 6thr_detachedfn runing 7thr_joinablefn runing 8thr_detachedfn runing 9thr_joinablefn return 555thr_detachedfn runing 10can't pthread_join ntid_detached thread:Invalid argument