这是在Linux上,但理想情况下我想要一个符合POSIX标准的解决方案。
我有两个线程,每个线程都可以通过API函数写入硬件总线。在任何给定时间只允许一个线程写入总线,并且在总线写入之后,不得在大约几百毫秒的给定时间内写入总线。
两个线程都实现为状态机。
显而易见的解决方案是使用互斥锁序列化对总线的访问,设置计数器或时间戳,并让状态机在适当的时间到期后解锁互斥锁。
这对我来说似乎有点脆弱。如果未来的维护开发人员错误地修改了状态机,则互斥锁可能不会被释放,从而导致难以诊断的死锁。
是否存在锁定互斥锁的API调用,但在给定超时后会自动解锁? Google透露了pthread_mutex_timedlock(),但这并不完全相同。
答案 0 :(得分:1)
如何在共享(和互斥覆盖的)内存中设置最后一次总线访问的时间戳?每次写入都不会像这样:
答案 1 :(得分:1)
如果遇到这个问题,我可能会使用另一个'APIwrite'线程与驱动程序进行交互。该线程将循环生成器 - 消费者队列弹出和休眠(几百毫秒)。任何其他希望写入的线程只是排队* writeBuffer。 writeBuffer结构可以包含APIwrite线程在写入后将调用的函数(* writeBuffer)指针。由起始线程提供的此功能可以是 发信号通知原始线程正在等待的事件,或者只是释放* writeBuffer。
使用显式互斥锁,定时器等来消除混乱,并允许同步或异步写入。