gpt4 book ai didi

c - C中如何判断多个线程同时调用函数?

转载 作者:太空宇宙 更新时间:2023-11-04 05:47:36 24 4
gpt4 key购买 nike

我想确定是否可以同时从多个线程调用 C 中的某个函数,以便了解是否需要使用互斥锁来保护它。实现和定义函数的文件没有任何互斥机制,因此有可能只有一个线程访问过该函数,但也有可能有多个线程访问。

我想添加一个线程本地存储变量,它在启动函数时递增,在退出函数时递减。如果递减后变量的值大于 0,则多个线程访问该函数。

这是我的代码:

#include <stdio.h>

static __thread int threadCounter = 0;

void f(void)
{
threadCounter++;

// do something

threadCounter--;
printf("threadCounter: %d\n", threadCounter);
}

我想知道这个解决方案是否足以确定是否有多个线程访问一个函数,以及是否有更好的方法来实现这一点。

最佳答案

来自GCC documentation :“线程本地存储 (TLS) 是一种分配变量的机制,这样每个现存线程都有一个变量实例。”
因此,您的解决方案将始终指示当时只有一个线程访问您的函数,即使事实并非如此。您应该使用在线程之间共享的变量。但是使用 volatile 仍然不是一个好的解决方案,因为如果同时有多个线程访问它,该值可能不是好的。

总而言之,我认为更好的方法是设置一个互斥锁并使用 pthread_mutex_trylock 函数来检测是否有多个线程试图调用您的函数。

关于c - C中如何判断多个线程同时调用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56236289/

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