![]() |
1
15
当前的C++标准甚至不承认线程的存在,所以
至于您的代码:如果您需要锁,请使用锁。那个
|
![]() |
2
6
不,它不能保证线程安全。
你的同步机制有缺陷。你允许
|
![]() |
3
1
另外,您的同步机制可能不是很好。 你的胸部,所以你有问题。 你至少应该放一个 不稳定的 在你的锁门前的限定符;或者最好还是研究适合您的平台的真正互斥函数。 |
![]() |
4
1
编辑: 事实上你可能会侥幸逃脱。。。Thread1仅向列表中添加元素,而Thread2仅删除元素。这意味着,只有当列表仅包含一个元素时,Thread1才需要等待。 编辑2: 因此,如果列表只包含一个元素,thread2可以锁定该列表。它必须在每次删除之前检查。这样一来,thread1就不必等待,除非发生了这样一种情况。 而且您肯定应该使用适当的互斥机制(平台上的任何可用机制),而不是布尔标志。 |
![]() |
5
0
如果您确实需要thread1尽可能快,但仍然需要线程安全,则可以以最小的开销为代价防止一些锁争用,例如:
我认为这是与线程安全性最直接的结合。不幸的是,Thread1必须始终锁定。您可能会想出一些方法,为thread1批处理帧。根据您在问题中的数字,我假设thread1的运行次数比thread2多得多,因此这将节省一些锁争用,否则仅使用一个缓冲区列表就会发生锁争用。 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |
![]() |
user1700890 · 了解交互式代理Python API中的线程 2 年前 |
![]() |
AntonBoarf · 为什么要将实例变量指定给局部变量? 2 年前 |
![]() |
rhymes · 如何让线程操作相同的java列表 3 年前 |