gpt4 book ai didi

c - 互斥量(锁)的所有权是如何实现的?

转载 作者:行者123 更新时间:2023-12-05 01:33:10 26 4
gpt4 key购买 nike

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

这是我到目前为止。请记住,它还没有完成,并且假设非常简单(单处理器、互斥锁没有递归、禁用中断作为互斥方法等)。

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

我相信我应该添加另一个成员变量,即 whoIsOwner,但我对在那里存储什么感到困惑。我认为它必须是可以唯一标识尝试调用锁的线程的东西?这样对吗?

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

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

最佳答案

您可以将互斥锁实现为原子整数,即 0解锁时,它采用锁定线程 ID 的值来指示它已锁定。当然,对变量的访问必须是原子的,并适本地进行围栏以防止重新排序(获取-释放围栏对就足够了)。

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

关于c - 互斥量(锁)的所有权是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10710599/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com