gpt4 book ai didi

linux - 等待线程如何知道共享资源已被另一个线程解锁?

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

我正在研究多线程应用程序。我正在使用互斥体进行同步。

我想了解等待线程如何知道另一个线程锁定的共享资源现在已解锁?

我需要在“MUTEX”用法的情况下理解上述内容。

最佳答案

如果信号量是全局定义的,则进程中的所有线程共享一个信号量。

假设我们有一个 writeLogMessage(char*) 函数,它打开一个文件并写入给定的字符串。从多个线程调用此方法将导致不需要的(且不可预测的行为)。因此,您可以编写一个线程安全的包装函数,该函数等待其他线程释放共享资源(本例中为日志文件)。

sem_t log_mutex;

void writeLogTS(char *logmsg)
{
sem_wait(&log_mutex); //suspend the thread if another thread is currently writing to the log file
writeLogMessage(logmsg);
sem_wait(&log_mutex); //post the mutex semaphore
}

如果信号量的值大于0,函数sem_wait将减少信号量的值。但是,如果log_mutex的值为0,sem_wait将暂停当前线程的执行,直到该值再次增加。增加该值是通过sem_wait完成的。IE。如果信号量的值大于 0,其他线程就知道共享资源再次可用。

编辑:要用作互斥体,必须在启动线程之前初始化信号量 log_mutex,如下所示:sem_init(&log_mutex, 0, 1);第二个参数为 0,以保证信号量在线程之间共享,第三个参数是初始值。比照。 http://pubs.opengroup.org/onlinepubs/7908799/xsh/sem_init.html

关于linux - 等待线程如何知道共享资源已被另一个线程解锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23456268/

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