c++ - 在多线程应用程序中使用全局数组
问题描述
我正在使用 Toradex Colibri iMX7 来运行我们的嵌入式软件(C、C++)。我们的应用程序是从两个传感器获取数据并实时绘制它。我们有两个线程,一个用于数据采集(将数据附加到全局数组中),另一个线程用于绘制值数组(相同的全局数组)一个时间间隔(100ms)。在尝试这个时,我们的应用程序会在一段时间后崩溃。我知道某种线程同步是必要的,但不知道如何处理。任何建议或示例都会有所帮助。
解决方案
这是一个虚拟示例,如何使用互斥锁与 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);
推荐阅读
- ajax - Laravel 重定向验证错误
- c# - 请求被中止:无法使用 Hangfire 创建 SSL/TLS 安全通道错误
- docker - docker-ce 19.03.5 在尝试启动从 docker hub 抓取图像的容器时不会使用代理
- .net - 设置/更改有界 DataGridView 的 ValueType
- javascript - 创建烛台图并在绘图中使用 getImage
- wpf - Wpf Dispatcher 何时创建?
- javascript - ul 扩展器列表未按预期运行
- google-apps-script - 如果相邻单元格包含特定文本,如何创建一个函数以将单元格的值增加 1?
- python - 在 Mac 上安装 Python 3 和 Alias it
- javascript - 如何让我的 HTML 文件访问我在 Amazon S3 存储桶中的 CSS 和 JavaScript 文件?