如何实现互斥锁(锁)的所有权?

尝试在C中实现一个非常简单的互斥锁(锁)我有点困惑.我理解互斥锁类似于二进制信号量,除了互斥锁还强制执行释放锁的线程的约束,必须是最近获得它的同一个主题.我对如何跟踪所有权感到困惑?

这就是我到目前为止所拥有的.请记住,它还没有完成,并且假设非常简单(单处理器,互斥体上没有递归,禁止中断作为互斥方法等).

struct mutex {
    char *mutexName;
    volatile int inUse;
};

我相信我应该添加另一个成员变量,即whoIsOwner,但我有点困惑,因为它存储在那里.我认为它必须能够唯一地识别试图调用锁的线程?它是否正确?

我有一个具有“char * threadName”成员变量(以及其他)的线程结构,但我不确定如何从互斥锁实现中访问它.

任何指针/提示/想法将不胜感激.

最佳答案
您可以将互斥锁实现为原子整数,解锁后为0,并获取锁定线程ID的值以指示它已锁定.当然,对变量的访问必须是原子的,并且适当地隔离以防止重新排序(获取 – 释放围栏对就足够了).

最终,你绝对不能阻止自己在脚下射击;如果你真的想要你可以通过另一个线程或类似的东西强制覆盖互斥锁的内存.只有正确使用工具,才能获得正确的行为.考虑到这一点,您可能会对锁定变量的简单bool感到满意.

转载注明原文:如何实现互斥锁(锁)的所有权? - 代码日志