1
11
线程。睡眠(0)是收益率。我猜这会重新安排你的通话方式,以避免一些问题。我认为,如果你发布的代码产量,并运行在1000台机器上,你会得到很多错误报告。我猜您需要某种类型的锁/关键部分来避免死锁,因为有些地方的代码不是线程安全的。可能在你打电话给的图书馆里。
|
2
4
如果不查看整个代码库,这是不可能回答的。 好可怕 练习,你不应该这样做。您基本上是在改变导致死锁的代码计时,而不是从实际解决死锁条件开始。
|
3
3
|
4
2
当它陷入困境时,有多少个线程同时运行? |
5
1
每次锁定互斥锁时打印一行,解锁时打印另一行。请记住在打印时包含函数名和线程id。应该能告诉你什么时候锁上了。似乎调用sleep(0)的竞争条件仍然会导致CPU使用循环来处理对函数的调用。因此导致一种固有的睡眠。 |
6
1
我想你该离开电脑,走到白板上去了。分析每个元素是如何锁定的,以及在什么情况下它会小心地释放锁。五个线程可能是一个困难的问题,所以可以看看是否只有两个线程可以导致相同的情况。有些东西锁不好,你需要找到地方。 除非你的代码不值得付出这么多努力,否则就离开线程。睡眠()在那里,因为它并没有真正伤害到你的表现非常宏伟的计划的事情。 |
7
1
你肯定有线程问题需要解决。打电话线程。睡眠(0)导致调度程序启动。这可能会给每个线程一个运行足够多的机会,以使事情正常工作。我不会把睡眠放在那里,就这样,因为这是一种工作了一段时间,然后一个完全不相关的变化最终打破了东西。 |
8
1
除非硬件强迫您这样做,否则您永远不应该使用sleep()。 试着用不同的方式思考这个问题。考虑哪些数据需要在线程之间共享,并考虑如何将数据发送(即复制)给相关方,而不是共享访问。。如果你做得对,你实际上可能不需要任何互斥。。。 记住,局部变量存在于不同的堆栈中,但是函数中的静态本质上是全局变量(当然,您需要仔细查看全局变量)。 |
9
0
也许试着用一个工具,比如 Typemock Racer ? 免责声明:我以前从未使用过这个工具。 |
10
0
是的,您可能遇到了计划程序过载。 我真心希望不会。 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |
user1700890 · 了解交互式代理Python API中的线程 2 年前 |
AntonBoarf · 为什么要将实例变量指定给局部变量? 2 年前 |
rhymes · 如何让线程操作相同的java列表 2 年前 |