Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Concurrency 在不实现互斥的情况下检测竞争条件_Concurrency_Locking - Fatal编程技术网

Concurrency 在不实现互斥的情况下检测竞争条件

Concurrency 在不实现互斥的情况下检测竞争条件,concurrency,locking,Concurrency,Locking,我知道我们可以通过使用原子锁变量实现互斥来检测和克服竞争条件,但是有没有办法在不实现互斥的情况下检测竞争条件 互斥会大大增加开销,因此我正在考虑一种在不增加额外开销的情况下克服竞争条件的方法。同步根本不需要增加太多开销。通常有相当便宜的合适方法来解决问题。如果您在这方面遇到问题,如果您发布场景的详细信息以及您正在使用哪些同步技术来保护它,我们可能会提供一些建议 至于避免同步的需要,确实没有好办法。这是一个在并发编程中必须处理的问题。在许多情况下,您可以完全避免需要多个线程,在其他情况下,您可以尽

我知道我们可以通过使用原子锁变量实现互斥来检测和克服竞争条件,但是有没有办法在不实现互斥的情况下检测竞争条件


互斥会大大增加开销,因此我正在考虑一种在不增加额外开销的情况下克服竞争条件的方法。

同步根本不需要增加太多开销。通常有相当便宜的合适方法来解决问题。如果您在这方面遇到问题,如果您发布场景的详细信息以及您正在使用哪些同步技术来保护它,我们可能会提供一些建议

至于避免同步的需要,确实没有好办法。这是一个在并发编程中必须处理的问题。在许多情况下,您可以完全避免需要多个线程,在其他情况下,您可以尽可能隔离线程,并将同步需求减少到几个关键位置。例如,在许多情况下,我喜欢使用消息线程概念,其中我有一个线程负责所有簿记和数据访问。工作线程然后将消息发布到此线程(使用同步队列)以进行处理。这样做意味着我只需要提供一个同步消息队列,所有其他操作都可以独立进行


希望这有帮助!如果您需要更具体的想法/建议,请随时发布更多详细信息。

您提到的“同步队列”可能会得到更好的解释。在消息队列示例中,一个很好的候选项是LinkedBlockingQueue—它使用未同步的锁。一般读者可能会认为您打算在队列方法中“同步”。@javadba很好的澄清,谢谢。在C中,getter可用于在
队列
周围创建线程安全包装器。