Linux下的pv操作
上一篇 /
下一篇 2012-08-21 09:09:57
/ 个人分类:Linux
51Testing软件测试网ef2f/g h"kw7X 关于pv操作部分的内容,其实算不上什么新的东西。但是它对于我们理解信号量、消息处理部分的工作还是有很大帮助的。之前我们给出了一个win32的处理方案,但是实现的比较草率。所以我们今天可以利用linux上的信号量函数把这个功能重新实现一遍。51Testing软件测试网p*@J\Baz
51Testing软件测试网2` E)r-[H9Y (1)linux下面信号量的基本函数51Testing软件测试网9iiv'tj8F``*~.N
@
O9l O&nm,M0 a)创建信号量 sem_init51Testing软件测试网%md0o"d!iD{| k
51Testing软件测试网F5OfC5M'gIk b)等待信号量 sem_wait
9A(cb#M)v051Testing软件测试网0K0[#ps2`k c)释放信号量 sem_pos
c
Y3OT%TTpG/[
{ h6c0L%H1t \3s7egjvw0 d)删除信号量 sem_destroy
GZw}3bl&D.L0q-AY&{*kU0 (2)编写pv操作函数51Testing软件测试网w,e~+B6h R%G1P
51Testing软件测试网
~}0_Qq-c9M 之前在编写pv操作的时候,没有考虑到消息处理的时序问题,所以在某些极端的情况下可能会造成一些问题。所以本次pv操作采用了循环队列的形式,保持了消息的先后入队顺序。这样对于线程收到的各种消息就可以依次进行处理解决了。同样,我们文件编译的方法非常简单,shell下输入gcc sem.c -g -o sem -lpthread即可。
8L7{4v7d7i2m0B051Testing软件测试网Bo;Dm4ol#D 可能有同学会问,单独的循环队列和pv操作处理上有什么差别?其实差别很简单,pv可以是不同线程向一个线程发送消息,而循环队列只能接受一个线程发送的消息,否则处理上就麻烦了。
!A5x/M6Ri#e051Testing软件测试网c/h&fO3q#include <stdio.h>51Testing软件测试网[O?W,b*q
#include <malloc.h>
2WO U$}%xaF!_P0#include <string.h>