gpt4 book ai didi

c - 使用 pthread_mutex_lock 锁定资源是什么意思?

转载 作者:太空宇宙 更新时间:2023-11-04 06:59:20 26 4
gpt4 key购买 nike

我是多线程的新手,我很难理解互斥。

所以这是 pthread_mutex_lock 的原型(prototype)

int pthread_mutex_lock(pthread_mutex_t *mutex);

手册页说mutex 引用的mutex 对象应通过调用pthread_mutex_lock() 锁定。

首先我的理解是,你使用互斥锁来锁定一个共享资源,这样任何时候只有一个线程可以访问它。为了便于讨论,假设共享资源是一个名为 myVariable 的全局变量。现在如果我们想锁定 myVariable,我应该可以使用锁定机制来锁定 myVariable,但是锁定 mutex 对象 是什么意思呢?我的意思是,如果我调用 pthread_mutex_lock(&someMutex),我是在锁定 myVariable 还是其他东西?

总而言之,如果我想使用互斥,我不应该做一些像 pthread_mutex_lock(myVariable) 而不是 pthread_mutex_lock(&someMutex)?

还有这个someMutex对象是怎么对应到myVariable的?这个 someMutex 对象如何锁定对 myVariable 的访问?

附言假设我在它自己之前声明了 someMutex

附言我觉得这个问题可能很宽泛,但话又说回来,这不应该是因为我问的是实际上有特定答案的问题(如果我错了请纠正我)。

最佳答案

互斥量与它保护的对象之间的关联不为互斥量所知,也不必如此。假设我们有两个合作的人,他们需要共用一辆车。我们不希望一个人在另一个人使用汽车时尝试使用汽车。他们可以制定一个简单的规则——除非你拿着红萝卜,否则不要乱动汽车。由于只有一个人可以拿着萝卜,这样可以确保他们在尝试使用汽车时不会相互冲突。萝卜不必知道它在“保护”汽车。只要他们都不要开车,除非他们是拿着萝卜的人,否则萝卜会保护汽车。

互斥体就是萝卜。锁定互斥量会保持萝卜,等待其他人在需要时将其放下。解锁互斥量会将萝卜放在其他人可以得到的地方。

互斥量保护的变量或对象是汽车。萝卜保护汽车并非来自萝卜所做的任何事情,而是来自每个遵守规则的人,除非你有萝卜,否则不要碰车。互斥锁保护对象也是如此。

关于c - 使用 pthread_mutex_lock 锁定资源是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40479316/

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