我可以在pthread_mutex_lock内插入函数并解锁语句吗?

问题描述 投票:0回答:1

假设我想将原子指令设置为函数。

我宣布

pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;

作为全局变量。

而不是:

int main() {
     myFoo();
     ...
}

void myFoo() {
     pthread_mutex_lock(&mutex);
     myGlobal++;
     pthread_mutex_unlock(&mutex);
}

我可以做:

int main() {
     pthread_mutex_lock(&mutex);
     myFoo();
     pthread_mutex_unlock(&mutex);
     ...
}

void myFoo() {
     myGlobal++;
}

以便myFoo中的每个指令都变成原子的?

c mutex
1个回答
1
投票

您需要正确使用术语,否则其含义将是错误的。

否,不会是atomic,但是对myFoo的访问将被同步,这意味着当另一个线程正在使用它时,没有其他线程可以访问该零件代码。

通常使用

Atomic操作术语,表示一条指令在没有任何中断的情况下运行(有时被认为是无锁的)。例如,C11的atomic_flag提供了这样的功能。另一方面,互斥锁用于创建atomic_flag。您可以保护代码的一部分,以防止来自不同线程的同时访问。这两个术语不相似。

旁注:

只有mutual exclusion类型保证是真正的原子性且无锁,atomic_既是C又是C ++。其他诸如atomic_flag的对象可以使用同步方法来实现,并且不是无锁的。

© www.soinside.com 2019 - 2024. All rights reserved.