首页 > 其他分享 >多线程(2)-线程同步互斥锁Mutex

多线程(2)-线程同步互斥锁Mutex

时间:2024-04-04 09:15:15浏览次数:15  
标签:thread int 互斥 线程 pthread mutex 多线程

在 Linux 多线程编程中,互斥锁(Mutex)是一种常用的同步机制,用于保护共享资源,防止多个线程同时访问导致的竞争条件。在 POSIX 线程库中,互斥锁通常通过 pthread_mutex_t 类型表示,相关的函数包括 pthread_mutex_init、pthread_mutex_lock、pthread_mutex_unlock 等。   下面为一个demo,举例说明在多线程中使用互斥锁:

#include <stdio.h>
#include <pthread.h>

#define NUM_THREADS 5

// 共享资源
int shared_resource = 0;

// 互斥锁
pthread_mutex_t mutex;

// 线程函数
void *thread_function(void *arg) {
    int thread_id = *((int *)arg);

    // 加锁
    pthread_mutex_lock(&mutex);

    // 访问共享资源
    printf("Thread %d: Shared resource before modification: %d\n", thread_id, shared_resource);
    sleep(1);
    shared_resource++;
    printf("Thread %d: Shared resource after modification: %d\n", thread_id, shared_resource);

    // 解锁
    pthread_mutex_unlock(&mutex);

    pthread_exit(NULL);
}

int main() {
    pthread_t threads[NUM_THREADS];
    int thread_args[NUM_THREADS];
    int i;

    // 初始化互斥锁
    pthread_mutex_init(&mutex, NULL);

    // 创建多个线程
    for (i = 0; i < NUM_THREADS; ++i) {
        thread_args[i] = i;
        pthread_create(&threads[i], NULL, thread_function, (void *)&thread_args[i]);
    }

    // 等待所有线程完成
    for (i = 0; i < NUM_THREADS; ++i) {
        pthread_join(threads[i], NULL);
    }

    // 销毁互斥锁
    pthread_mutex_destroy(&mutex);

    return 0;
}

 

执行结果如下: 0  

标签:thread,int,互斥,线程,pthread,mutex,多线程
From: https://www.cnblogs.com/lethe1203/p/18113886

相关文章

  • 多线程(2)-线程同步条件变量
    在Linux多线程编程中,条件变量是一种用于线程间同步的重要机制。它通常与互斥锁结合使用,用于解决多个线程竞争共享资源的问题。条件变量允许一个线程在等待某个条件变为真时阻塞,并且在另一个线程改变条件并通知时恢复执行。这个玩意跟内核等待队列差不多意思。 在Linux多线......
  • 简易线程池实现
    程序中,频繁地调用pthread_create函数创建线程,非常浪费时间,尤其在服务器端的时候,多线程的使用情况下频繁启用线程和释放线程资源,这样也会影响程序的运行效率。可以先在服务器空闲的时候先创建多个线程,我们先在线程函数里面使用pthread_cond_wait将其休眠,有任务过来的时候使用pthre......
  • 安全访问多线程环境:掌握 Java 并发集合的使用技巧
    哈喽,各位小伙伴们,你们好呀,我是喵手。  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把......
  • “码中谜“ ConcurrentHashMap线程安全机制的弹指一挥间
    引言:ConcurrentHashMap是Java中解决并发编程问题的重要工具。它提供了线程安全的HashMap实现,并能在多线程环境下保持高性能。本文将深入ConcurrentHashMap的实现,解析其线程安全机制,并提供相关代码示例。详解ConcurrentHashMap的数据结构:ConcurrentHashMap在Java中是通过......
  • Jmeter线程组-上
    线程组线程组作为JMeter测试计划的核心组件之一,对于模拟并发用户的行为至关重要。线程组元件是整个测试计划的入口,所有的取样器和控制器必须放置在线程组下。可以将线程组视为一个虚拟用户池,其中每个线程可被理解为一个虚拟用户,多个虚拟用户同时执行相同的一批任务。在这个虚拟......
  • C++自用小轮子——线程安全队列
    目录简介线程安全队列简介记录开发时自用的小轮子:线程安全队列线程安全队列#ifndefTHREADSAFEQUEUE_H#defineTHREADSAFEQUEUE_H#include<iostream>#include<queue>#include<mutex>#include<condition_variable>#include<memory>template<typenameT>cl......
  • 进程、线程和进程间的通信
    技术笔记!前言一、概念1.程序:存放在磁盘上的指令和数据的有序集合(文件),静态的。2.进程:执行一个程序所分配的资源的总称;进程是程序的一次执行过程;        动态的,包括创建、调度、执行和消亡;3.进程和程序内容区别:BSS段:通常是指用来存放程序中未初始化的......
  • Csharp线程
    CSharpe线程目录CSharpe线程C#如何操作线程Thread1.Thread如何开启一个线程呢?2.Thread中常见的API3.thread的扩展封装threadpool一、.NETFramework2.0时代:出现了一个线程池ThreadPool二、线程池如何申请一个线程呢?三、线程等待四、线程池如何控制线程数量Task一、Task开启线......
  • 互斥量(优先级翻转)
    这里只是总结,大部分内容来自野火FreeRTOS教程。 互斥量正常可用于资源保护,这里很清晰,不多讲 而比较重要的是优先级继承机制。 互斥量与二值信号量最大的不同是:互斥量具有优先级继承机制,而信号量没有。 也就是说,某个临界资源受到一个互斥量保护,如果这个资源正在被一......
  • 线程间通信之wait和notify
    synchronized解释:java语言的一个关键字作用:实现同步机制,控制多线程的访问,确保同一时刻只有一个线程可以进入临界区执行同步代码。用法:加在代码块上、加在方法上、加在一个对象,原理:不管是那种用法,都会有一个对象(指定的对象、class的实例对象、class对象),这个对象又会一一对应一......