2017-10-21 90 views
0

这似乎是一个简单的任务,但它不起作用。我的线程函数运行在一个循环中,并始终将数据写入数组。但有时我想从我的主要功能中读取这些数据。因此,阅读功能应理想地暂停线程,读取数据,然后恢复线程。但是,读取的值不正确,似乎已损坏。也许有些不妥:pthread读/写同步

线程FCT:

void threadfct() 
{ 
    while (1) 
    { 
     pthread_mutex_lock(&mutex); 
     data = write_data(); 
     pthread_mutex_unlock(&mutex); 
    } 
} 

功能是从主循环调用应改为由线程函数写入的数据:

void read_data() 
{ 
    printf("Daten: %f\n", data[0]); 
} 
+1

您需要显示更多上下文。你是否真的在没有获取互斥锁的情况下阅读数据? –

+0

使用std :: thread。 – 2017-10-21 17:09:20

+0

@FlorianWeimer暗示的是,互斥体只有在两个线程都在进入临界区之前试图进入才会有效。 – CplusPuzzle

回答

0

试此更改:

void read_data() 
{ 
    pthread_mutex_lock(&mutex); 
    printf("Daten: %f\n", data[0]); 
    pthread_mutex_unlock(&mutex); 
} 
+0

我做过了,但它似乎阻止了我的程序的执行。 – Lemonbonbon

+0

@ Lemonbonbon那么你锁定了另一个互斥锁? – 2017-10-21 17:12:27

+1

所以请告诉我们更多关于您的程序,线程是如何创建的,您期望看到的以及您实际看到的内容 – CplusPuzzle