首页 > 解决方案 > 在多线程应用程序中使用全局数组

问题描述

我正在使用 Toradex Colibri iMX7 来运行我们的嵌入式软件(C、C++)。我们的应用程序是从两个传感器获取数据并实时绘制它。我们有两个线程,一个用于数据采集(将数据附加到全局数组中),另一个线程用于绘制值数组(相同的全局数组)一个时间间隔(100ms)。在尝试这个时,我们的应用程序会在一段时间后崩溃。我知道某种线程同步是必要的,但不知道如何处理。任何建议或示例都会有所帮助。

标签: c++cmultithreading

解决方案


这是一个虚拟示例,如何使用互斥锁与 pthread 库进行线程同步。

#include <pthread.h>
pthread_mutex_t _mutex; 
int globalArray[5];

void Write()
{
    pthread_mutex_lock (&_mutex);  

    // Write to global array
    globalArray[0] = 0;
    
    pthread_mutex_unlock (&_mutex);
}

int Read( )
{
    int i;
    pthread_mutex_lock (&_mutex);  
    
    // read from global array
    i = globalArra[0];

    pthread_mutex_unlock (&_mutex);
    return i;
}

在开始使用互斥对象之前,需要进行一次初始化。例如。你的程序的开始。

pthread_mutex_init(&_mutex, NULL);

当不再需要它时,您需要销毁它。例如。在程序结束之前。

pthread_mutex_destroy(&_mutex);

推荐阅读