|
|
1
0
发生这种情况的原因是,当多个线程写入流(stdout或文件)时,它们的输出几乎肯定会混合并产生无法读取的结果。您至少可以获得部分有序的输出,这主要是因为python有GIL。(顺便说一句,我得到了不同的输出。)一般情况下,当未指定语言时,没有任何东西可以阻止OS以以下方式调度线程执行:
因此,一般来说,当您向共享变量写入*时,需要使用互斥体、信号量或其他同步原语来保护这部分代码,以确保线程可以执行整个 临界截面,临界截面 不被打断:
保护您有争议的资源。另外,请注意,这种方法并没有指定线程执行的顺序。如果您需要先从线程1写入,然后再从线程2写入,那么您将需要再执行两个锁还是实现生产者-消费者模式(即,让两个线程在队列中写入,让第三个线程从队列中读取并写入文件/标准输出)。
*-在python中,赋值
|
|
|
user107586 · 如何处理等待句柄不会导致无限循环? 11 月前 |
|
|
ron burgundy · 获取-释放语义是否跨线程传递?[副本] 11 月前 |
|
|
BenjiFB · C#内存缓存:在一次操作中追加到列表? 11 月前 |
|
|
András Takács · Python多线程问题 1 年前 |
|
|
András Takács · Python多线程错误 1 年前 |