linux 多线程共用一个变量不使用互斥锁实现线程间同步

embedded/2024/10/20 9:59:07/

在Linux中,如果你想要在多个线程之间共享一个变量,并且你想要确保一个线程写入而另一个线程读取时能够及时同步,你可以使用原子操作。

对于写入线程,你可以使用 atomic_store 来存储变量,对于读取线程,你可以使用 atomic_load 来加载变量。这些操作都是原子的,意味着它们在执行过程中不会被其他线程中断。

以下是一个简单的例子,展示了如何在两个线程之间使用原子变量进行同步:

#include <stdatomic.h>
#include <stdio.h>
#include <pthread.h>
 
atomic_int shared_var;
 
void* write_thread(void* arg) {
    for (int i = 0; i < 10; ++i) {
        atomic_store(&shared_var, i); // 原子存储操作
    }
    return NULL;
}
 
void* read_thread(void* arg) {
    while (atomic_load(&shared_var) < 10) { // 原子加载操作
        printf("shared_var: %d\n", atomic_load(&shared_var));
    }
    return NULL;
}
 
int main() {
    pthread_t writer, reader;
    pthread_create(&writer, NULL, &write_thread, NULL);
    pthread_create(&reader, NULL, &read_thread, NULL);
    pthread_join(writer, NULL);
    pthread_join(reader, NULL);
    return 0;
}


http://www.ppmy.cn/embedded/128963.html

相关文章

算法: 模拟题目练习

文章目录 模拟替换所有的问号提莫攻击Z 字形变换外观数列数青蛙 总结 模拟 替换所有的问号 按照题目的要求写代码即可~ public String modifyString(String ss) {int n ss.length();if (n 1) {return "a";}char[] s ss.toCharArray();for (int i 0; i < n; i…

Java基础-CompletableFuture

CompletableFuture 是 Java 8 中引入的一个实现异步编程类。提供了一组丰富的方法来处理异步操作和多个任务的结果。 执行任务 可以使用CompletableFuture.supplyAsync()或者CompletableFuture.runAsync创建CompletableFuture对象&#xff0c;并执行任务。 supplyAsync <U&g…

MATLAB图片拼接配准系统

应用背景 图像配准现在已成为数字图像处理的研究热点&#xff0c;方法繁多&#xff0c;站在时代的前沿。图像配准多采用基于图像特征点的方法&#xff0c;这种方法易于用计算机处理并且容易实现人机交互&#xff0c;其重点在于如何提取图像上的有效特征点。 对图像拼接技术的…

促进绿色可持续发展 能源环保管理重中之重

在全球经济环境发展、资源逐渐减少的背景下&#xff0c;环境保护已成为全球共识&#xff0c;而工业作为经济发展的重要支柱&#xff0c;其环保监测的实现至关重要。以下是对工业重点环保监测实现方式的详细探讨&#xff1a; 18721098782 WPP 一、构建国家级环境监测网络 …

【优选算法】——双指针(下篇)!

&#x1f308;个人主页&#xff1a;秋风起&#xff0c;再归来~ &#x1f525;系列专栏&#xff1a;C刷题算法总结 &#x1f516;克心守己&#xff0c;律己则安 目录 1、有效三角形的个数 2、查找总价值为目标值的两个商品 3、三数之和 4、四数之和 5、完结散花 1、有…

tensorflow + pygame 手写数字识别的小游戏

起因&#xff0c; 目的: 很久之前&#xff0c;一个客户的作业&#xff0c;我帮忙写的。 今天删项目&#xff0c;觉得比较简洁&#xff0c;发出来给大家看看。 效果图: 1. 训练模型的代码 import sys import tensorflow as tf# Use MNIST handwriting dataset mnist tf.kera…

uiautomatorviewer安卓9以上正常使用及问题处理

一、安卓9以上使用uiautomatorviewer问题现象 打开Unexpected error while obtaining UI hierarchy 问题详情 Unexpected error while obtaining UI hierarchy java.lang.reflect.InvocationTargetException 二、问题处理 需要的是替换对应D:\software\android-sdk-windows…

PicoQuant GmbH公司Dr. Christian Oelsner到访东隆科技

昨日&#xff0c;德国PicoQuant公司的光谱和显微应用和市场专家Dr.Christian Oelsner莅临武汉东隆科技有限公司。会议上Dr. Christian Oelsner就荧光寿命光谱和显微技术的最新研究和应用进行了深入的交流与探讨。此次访问不仅加强了两家公司在高科技领域的合作关系&#xff0c;…