我看到或听到的所有并发程序的详细信息(诚然是一小部分)在某些时候都使用硬件同步功能,通常是某种形式的 compare-and-swap .问题是:是否存在任何并发程序,其中线程在整个生命周期中交互并在没有任何同步的情况下逃脱?
我想到的示例包括:
一个程序相当于一个线程在大量案例上运行是/否测试,而一大堆线程根据可能/否测试来标记案例。这不需要同步,因为脏数据只会影响性能而不影响正确性。
一个有许多线程更新数据结构的程序,其中任何现在有效的状态将始终有效,因此脏读或写不会使任何内容无效。这方面的一个例子是(我认为)path compression in the union-find algorithm .
最佳答案
如果您可以将工作分解成完全独立的 block ,那么是的,存在并发算法,其唯一的同步点是工作结束时所有线程加入的那个点。并行加速是能够分解成大小尽可能相似的任务的一个因素。
关于algorithm - 是否有任何正在使用的并发算法可以在没有任何同步的情况下正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2395316/