全球旧事资料 分类
方式有:1线程从启动例程中返回2线程可以被另一个进程终止3线程自己调用pthread_exit函数i
cludepthreadhvoidpthread_exitvoidrval_ptr功能:终止调用线程Rval_ptr线程退出返回值的指针。i
cludepthreadhi
tpthread_joi
pthread_ttidvoidrval_ptr功能:阻塞调用线程,直到指定的线程终止。Tid等待退出的线程idRval_ptr:线程退出的返回值的指针线程标识i
cludepthreadhpthread_tpthread_selfvoid功能:
f获取调用线程的threadide
tifier线程终止有两种情况:正常终止和非正常终止。线程主动调用pthread_exit或者从线程函数中retur
都将使线程正常退出,这是可预见的退出方式;非正常终止是线程在其他线程的干预下,或者由于自身运行出错(比如访问非法地址)而退出,这种退出方式是不可预见的。不论是可预见的线程终止还是异常终止,都会存在资源释放的问题,如何保证线程终止时能顺利的释放掉自己所占用的资源,是一个必须考虑解决的问题。从pthread_clea
up_push的调用点到pthread_clea
up_pop之间的程序段中的终止动作(包括调用pthread_exit和异常终止,不包括retur
)都将执行pthread_clea
up_push所指定的清理函数。i
cludepthreadhvoidpthread_clea
up_pushvoidrt
voidvoidarg功能:将清除函数压入清除栈Rt
清除函数Arg清除函数的参数i
cludepthreadhvoidpthread_clea
up_popi
texecute功能:将清除函数弹出清除栈参数:Execute执行到pthread_clea
up_pop时是否在弹出清理函数的同时执行该函数,非0执行0不执行进行多线程编程,因为无法知道哪个线程会在哪个时候对共享资源进行操作,因此让如何保护共享资
f源变得复杂,通过下面这些技术的使用,可以解决线程之间对资源的竞争:1互斥量Mutex2信号灯Semaphore3条件变量Co
ditio
s为什么需要互斥量:Itempqueue_listQueue_listqueue_list
extprocess_jobpfreep当线程1处理完Itempqueue_list后,系统停止线程1的运行,改而运行线程2。线程2照样取出头节点,然后进行处理,最后释放了该节点。过了段时间,线程1重新得到运行。而这个时候,p所指向的节点已经被线程2释放掉,而线程1对此毫无知晓。他会接着运行process_jobp。而这将导致无法预料的后果!对于这种情况,系统给我们提供了互斥量。线程在取出头节点前必须要等待互斥量,如果此时有其他线程已经获得该互斥量,那么该线程将会阻塞在这里。只有等到其他线程释放掉该互斥量后,该线程才有可能得到该互斥量。互斥量从本质上说就是一把锁提供对共享资源的保护访问。在Li
ux中互斥量使用类型pthread_mutex_t表示。在使用前r
好听全球资料 返回顶部