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

标签 c multithreading loops if-statement

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

相关文章:

C程序在Windows上运行在Linux上出现段错误

CMake add_subdirectory 与 find_package?

c - 在串行通信的情况下,tcgetattr 的错误 9 是什么

multithreading - C++0x 线程和套接字

在新线程中执行任务时 JavaFX UI 卡住

java - 无法理解Threads-Runnable Interface的工作原理

python - 在 while 循环中将变量从 int 转换为 str?

java - 获取给定开始和结束日期的日期列表

c - 多平台支持、预处理程序或与各个库的链接

python - 循环遍历 .csv 文件,条件位于不同列中