如果我有多个线程同时运行,我怎么才允许只有1个线程进入关键区域?如果我在关键区域有超过1个线程,会发生什么?
答案 0 :(得分:1)
由于不正确保护的关键部分可能会发生多种错误,但最常见的是race condition。当程序的行为或输出的正确性取决于特定序列中发生的事件时,会发生这种情况,但事件可能以不同的顺序发生。这将导致程序以意外或不可预测的方式运行。 (抱歉在最后一点上有点模糊,但就其本质而言,通常很难提前预测确切结果是什么,而不是说“它可能不是你想要的”。)
通常,为了解决这个问题,您需要使用某种锁来确保只有一个线程可以同时访问关键部分。最常见的机制是mutex lock,它用于“简单”的情况 - 你有一些共享资源,只有一个线程可以同时访问它。
对于更复杂的情况,还有一些其他机制可用,例如: