gpt4 book ai didi

c - 变量和多线程的奇怪问题

转载 作者:行者123 更新时间:2023-11-30 19:11:03 24 4
gpt4 key购买 nike

我有一个具有多个线程的程序。在我的主线程中,我在永久循环中检查全局变量的值是否为 1。我在运行时在另一个线程中将该变量设置为 1,并将其锁定为 1。所以主线程中的if条件应该为true。但它不起作用......但是如果我在 if 条件之前放置一个 printf 它就起作用了。这太奇怪了我不知道出了什么问题。谢谢

代码:

while(1) 
{
printf("\n");
if(logging_active == 1) {
//check filesize every 30s. If logfile size over 1MB (1.000.000) send file
if((timestamp_realtime_sec() - last_time) >= ((logtime+1))) {
printf("check filesize...\n");
if(fileSize("log") > 100000) {
logfileHandler("log");
}
last_time = timestamp_realtime_sec();
}
}
}

输出:

check filesize ...

如果没有 printf,它不会输出任何内容。

我的解决方案:将变量声明从 intlogging_active 更改为 volatile intlogging_active 解决了问题。

最佳答案

我假设您正在锁定互斥锁并在其他线程中更新logging_active。您应该锁定相同的互斥体并在当前线程中进行检查。

pthread_mutex_lock(mutex);
while(logging_active == 0) {
pthread_mutex_unlock(mutex)
sleep(SOME_TIME);
}
pthread_mutex_unlock(mutex)
//Your code
}

但我建议您使用condition variables .

关于c - 变量和多线程的奇怪问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40741760/

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