Posix线程锁定:永远等待

时间:2017-04-01 00:34:00

标签: c multithreading pthreads posix race-condition

当线程被锁定永远等待时如何命名情况?我找到了几个关于何时 两个线程发生碰撞 的例子,称为 race condition

A race condition occurs when two or more threads 
can access shared data and they try to 
change it at the same time

但是当一个帖子是 stuck waiting forever for another thread 时,是否有任何特定术语来命名这种情况,或者它仍然被命名为 竞争条件 ,即使我们有两个线程不同时尝试访问共享数据,而是......其中一个线程被锁定等待第二个线程永远?

1 个答案:

答案 0 :(得分:0)

如果Thread_1正在等待Thread_2,并且同时Thread_2正在等待Thread_1。它被称为死锁。当死锁发生时,它就像两条线程相互争斗。

另一种情况称为实时锁定。实时锁定就是有一个线程永远等待另一个线程的情况。如果Thread_2正在等待Thread_1。并且Thread_2想要从Thread_1获得写锁定。但此时还有另一个Thread_3。 Thread_3也希望从Thread_1获得写锁定。不幸的是,Thread_3的优先级高于Thread_2。所以当Thread_1释放写锁时。 Thread_3立即获得了写锁定。并且有一个Thread_4,Thread_4与Thread_3具有相同的优先级......

Thread_2似乎一直在等待写锁。那被称为活锁。 为了避免这个问题,我们可以构建一个服务器队列。哪个线程提前排队,我们先处理早期的线程。

Pthread为我们提供了锁定资源的方法。我们可以使用互斥锁或其他东西。但是我们必须在使用锁之后解决问题。

您可以在并发控制中获得有关此主题的更多信息。