Linux-多线程及pthread库API函数理解

POSIX线程(英语:POSIX Threads,常被缩写为Pthreads)是POSIX的线程标准,定义了创建和操纵线程的一套API。原本对pthread的api和多线程存在一些误解,这里记录下来。

几个事实:

-线程的运行需要cpu资源,cpu分配给每个线程的时间片结束后,cpu将交给其他等待运行的线程。

-主线程结束后,由他创建的子线程也会结束

-使用sleep函数意味着挂起当前线程,将cpu交给其他等待运行的线程。

-使用pthread_create()函数创建子线程之后,线程就开始运行了

-pthread_join使得调用该函数的线程挂起等待,直到指定的线程结束,并回收指定线程资源。

-pthread_detach将线程状态设置为分离的(detached)

-分离线程的资源由系统自动释放

-在任何一个时间点上,一个线程是可结合的(joinable)或者可分离的(detached)

-被分离的线程不可被结合

推论:

使用pthread_create()函数创建子线程之后,此时主线程也继续运行。此时主线程和子线程在各自的时间片上交替运行,如果主线程在子线程开始运行前就结束,那么子线程也将直接结束;如果主线程不断运行,则子线程会分配到cpu时间片从而运行。

-如果主线程使用sleep,子线程将会立即得到cpu执行权(多个子线程则根据优先级)

-如果某个子线程使用sleep,主线程或者其他子线程将立刻得到cpu执行权(根据优先级)。

-如果线程调用pthread_join等待自己,将造成死锁。此时函数会直接返回EDEADLK(35)死锁

-线程被创建后,为了释放资源,防止内存泄漏,只能采取主线程或者线程调用pthread_detached,或者主线程调用pthread_join两种方法中的一种。

参考:

https://blog.csdn.net/jiuyueguang/article/details/9350771

你可能感兴趣的:(Linux-多线程及pthread库API函数理解)