【发布时间】:2012-12-03 15:36:16
【问题描述】:
我有许多 POSIX 线程,两个读取器从串行端口读取,其他读取器使用文件描述符写入同一端口。如何在它们之间共享相同的描述符?我通过信号量在所有线程之间同步了读/写和写/写操作。
注意:我假设文件描述符应该在同一进程的线程之间共享,但是当第二个读取器尝试从端口读取时,我的代码无法运行并出现 EBUSY 错误。 (之前问过question)
更新
这是一个有点奇怪的情况,即使在运行时只有一个线程,在write() 之后对read() 的任何调用都会返回-l 并出现EBUSY 错误。也许我问错了问题。每个write() 之后应该有某种flush 以确保该设备是免费的?或者以某种方式强制write() 阻止?
【问题讨论】:
-
为什么需要并发访问?你不能通过一个线程来避免这种情况,而所有其他线程都在排队读/写命令吗?
-
文件描述符是共享的。您能否在您的问题中添加一些代码,以显示您如何进行锁定和读取?当然,还要考虑重新设计,其中只有一个线程(甚至可能是一个全新的线程)进行读取。
-
@didierc 这样的情况会很难设计
-
为什么会这么难?
-
@didierc 我需要更改一个复杂的机械控制和平衡系统,我不知道它是如何工作的,因为我的领域是计算机科学,我对力学一无所知。我只能分析系统实现。
标签: c++ multithreading synchronization pthreads