
实现信号量
文章平均质量分 81
luotuo44
这个作者很懒,什么都没留下…
展开
-
实现信号量(三) 消息队列实现信号量
前一篇使用管道实现信号量,本文使用消息队列实现信号量。其原理和管道一样,都是通过在消息队列里面写入一个字符,读取一个字符。这里就不再多说了,直接上代码。 msg_sem.hpp 文件 #ifndef MSG_SEM_HPP #define MSG_SEM_HPP #include #include #include #include typedef struct原创 2014-01-05 16:56:19 · 2364 阅读 · 0 评论 -
实现信号量(一) 开篇
这系列文章是用管道、消息队列、条件变量来模拟实现信号量的功能。如果有bug,还望各位读者不吝指出。 这里实现的信号量都是只能用于一个进程内多个线程进行通信的,并不能用于进程间的通信。这里的所有函数的返回值同POSIX标准中的线程那些函数一样,如果函数执行成功,返回0,否则返回错误编号。不会设置errno变量。 测试的代码是《UNIX网络编程 卷2:进程间通信》中原创 2014-01-05 16:02:05 · 1360 阅读 · 0 评论 -
实现信号量(四) 条件变量实现信号量
前一篇讲了用消息队列实现信号量,这里使用条件变量实现信号量。有关条件变量的使用可以参考我的一篇博文。其实现原理和前面的两篇文章说述的有很大的不同。 其原理是通过一个变量sig_num来标明信号量的值(即资源的可用个数)。当然这个变量的修改要用一个mutex来锁住。当使用v操作释放一个资源时,在实现函数里面,将调用条件变量的信号发送函数pthread_cond_signal,唤醒线原创 2014-01-05 17:16:22 · 1918 阅读 · 0 评论 -
实现信号量(二) pipe实现信号量
上一篇开篇,并实现了线程结构体。现在来开启模拟信号量吧。 本文是用pipe管道来实现信号量。 pipe_sem.hpp文件 #ifndef PIPE_SEM_HPP #define PIPE_SEM_HPP #include typedef struct pipe_sem_tag { int fd[2]; pthread_mutex_t原创 2014-01-05 16:45:43 · 1415 阅读 · 0 评论