sách gpt4 ai đã đi

Quyền sở hữu mutex (khóa) được thực hiện như thế nào?

In lại 作者:行者123 更新时间:2023-12-05 01:33:10 28 4
mua khóa gpt4 Nike

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

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

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

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

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

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

1 Câu trả lời

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

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

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

28 4 0
Bài viết được đề xuất: tsql - 你写哪个SQL?
Bài viết được đề xuất: zend-framework - Zend 框架 : How to do unit testing in case of remote API calls
Bài viết được đề xuất: Haskell (lồng nhau) ReaderT
Bài viết được đề xuất: ember.js Ember.Select multiple=true 预选值
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com