本篇主要讲解pthread_mutex_t 和pthread_cond_t之间配合的工作以及需要注意的事项:
以下code是在codeblocks中编写~
首先pthread_create(&thread,&attr,workThread,(void *)&threadId);创建线程,然后通过_sleep(1);目的是让workThread函数先锁定mutex,这样就不会出现pthread_cond_wait, pthread_cond_signal先后的顺序逻辑错误了。
流程:
mainthread->sleep 1->workThread lock mutex -> pthread_cond_wait unlock mutex -> main thread lock mutex
-> 然后执行循环里面的事情,虽然中途已经解了锁,但是由于主线程仍然未调用pthread_cond_signal所以直到调用后,workThread
才会执行printf,当然pthread_cond_signal也可以紧紧的跟在pthread_mutex_lock后面,那样一旦在循环中调用了pthread_mutex_unlock后主线程和工作线程将会交叉执行 。这么看来当signal给一个线程时,不会妨碍主线程的执行过程 。
下面讲解一下pthread与semaphore的用法:
首先注意sem_init中第二个和三个参数的意义:第二个如果不为0代表进程间共享sem,第三个代表sem值的初始值。
这是个读写问题,代表每次必须先写后读,主线程要给子线程足够的时间,_sleep(10000)最多只能写读两轮 。。。