我有一个具有多个线程的程序。 在我的主线程中,我在永久循环中检查全局变量的值是否为 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/