在C中使用信号量和共享内存的Reader-Writer

时间:2012-05-15 19:58:51

标签: c posix semaphore readerwriterlock

我正在尝试使用名为信号量的POSIX创建一个简单的读写器程序,它的工作原理,但在某些系统上,它会立即停止在第一个信号量上,就这样......我现在真的很绝望。有人可以帮忙吗?它在我的系统上工作正常,所以我无法通过ltrace跟踪问题。 (对不起评论,我来自捷克共和国)

https://www.dropbox.com/s/hfcp44u2r0jd7fy/readerWriter.c

2 个答案:

答案 0 :(得分:1)

POSIX信号量不适合应用程序代码,因为它们是可中断的。基本上,任何类型的IO都会破坏您的信号。请查看this post

因此,您必须非常小心地正确解释sem_函数的所有错误返回。在您发布的代码中没有这样的东西。

如果您的POSIX实现支持它们,只需使用rwlocks,它们就是为此而制作的,更高级别并且不会遇到这种困难。

答案 1 :(得分:0)

在计算机科学中,读​​者 - 编写者问题是并发中常见计算问题的例子。问题至少有三种变体,它们处理许多线程一次尝试访问同一共享内存的情况。有些线程可能会读取而有些线程可能会写入,但约束条件是没有进程可以访问共享进行读取或写入,而另一个进程正在写入它。 (特别是,允许​​两个或更多读者同时访问共享。)读写器锁是一种解决一个或多个读者 - 写者问题的数据结构。