Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 实现互斥确保有界等待_Multithreading_Mutex - Fatal编程技术网

Multithreading 实现互斥确保有界等待

Multithreading 实现互斥确保有界等待,multithreading,mutex,Multithreading,Mutex,这是我遇到的一个面试问题,我不知道如何回答 首先,什么是有界等待互斥体,你能给我一些互斥体的例子吗,它可以确保有界等待,但不能确保有界等待 其次,我不知道如何实现它,因为互斥似乎是操作系统的内置功能 你会如何回答这个面试问题?我可以使用什么样的原子操作来实现互斥以及如何实现互斥?您当然可以在操作系统的永不超时互斥之上实现超时互斥。使用操作系统提供的互斥来调节对自己计数器的访问,保证总是快速释放它 重复 ... 在计数器上获取操作系统互斥锁 ... 检查计数器,请参见>0。 ... ... 如果大

这是我遇到的一个面试问题,我不知道如何回答

首先,什么是有界等待互斥体,你能给我一些互斥体的例子吗,它可以确保有界等待,但不能确保有界等待

其次,我不知道如何实现它,因为互斥似乎是操作系统的内置功能


你会如何回答这个面试问题?我可以使用什么样的原子操作来实现互斥以及如何实现互斥?

您当然可以在操作系统的永不超时互斥之上实现超时互斥。使用操作系统提供的互斥来调节对自己计数器的访问,保证总是快速释放它

重复
... 在计数器上获取操作系统互斥锁
... 检查计数器,请参见>0。
... ... 如果大于0,则递减,释放操作系统互斥,返回超时互斥已获取
... 释放计数器上的操作系统互斥锁
... 检查是否超时
... ... 如果超时,则返回超时互斥已超时
... 睡一段时间
结束重复

当然,POSIX互斥锁有一个trylock函数,这使得等待循环变得很简单


繁忙的等待当然是对CPU能力的浪费。更有效的实现是可能的,例如POSIX有条件变量。

似乎有两种“有界等待”用法:

任何特定进程进入其关键部分的等待时间都有一个界限

:

请求进入关键部分的流程只需等待一定数量的其他流程进入和离开关键部分即可


不幸的是,我不知道如何回答这个问题。它似乎确实依赖于操作系统原语。也许他们在找类似的东西