概念 
 
1.多个执行流进行安全访问的共享资源——临界资源 
2.多个执行流中,访问临界资源的代码——临界区--往往是线程代码的很小一部分 
3.想让多个线程串行访问共享资源——互斥 
4.对一个资源进行访问的时候,要么不做,要么做完——原子性 
解决方案: 
 
解决方案:加锁 
 
互斥锁pthread_mutex_t确保同一时间只有一个线程能进入临界区 
一、POSIX线程库(pthread)互斥锁(Mutex)接口 
 
函数接口功能描述参数与返回值pthread_mutex_init初始化互斥锁- 参数:pthread_mutex_t *mutex(锁对象)、const pthread_mutexattr_t *attr(属性,通常为NULL) 
- 返回值:成功返回0,失败返回错误码。pthread_mutex_destroy销毁互斥锁(释放资源)- 参数:pthread_mutex_t *mutex(已初始化的锁对象) 
- 返回值:成功返回0,失败返回错误码。pthread_mutex_lock加锁(阻塞式):若锁已被占用,当前线程会阻塞等待- 参数:pthread_mutex_t *mutex 
- 返回值:成功返回0,失败返回错误码(如被信号中断返回EINTR)。pthread_mutex_trylock尝试加锁(非阻塞式):若锁已被占用,立即返回失败,不阻塞- 参数:pthread_mutex_t *mutex 
- 返回值:成功返回0,失败返回EBUSY(锁被占用)或其他错误码。pthread_mutex_unlock解锁:释放锁,唤醒等待队列中的一个线程- 参数:pthread_mutex_t *mutex 
- 返回值:成功返回0,失败返回错误码(如未加锁时解锁返回EPERM)。二、C++标准库()基础互斥锁类 
 
类名功能描述核心成员函数std::mutex基础互斥锁(不可递归,同一线程不能重复加锁)- lock():加锁(阻塞) 
- try_lock():尝试加锁(非阻塞,成功返回true) 
- unlock():解锁std::recursive_mutex递归互斥锁:允许同一线程多次加锁(需对应次数的解锁)同std::mutex,但支持同一线程重复lock()(次数不超过实现限制)std::timed_mutex带超时的互斥锁:支持在指定时间内尝试加锁增加try_lock_for(std::chrono::duration)和try_lock_until(std::chrono::time_point)如果锁是局部的需要用pthread_mutex_destroy与int pthread_mutex_init来创建和销毁,如果是全局或者静态的,则直接用pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;进行初始化 
code: 
 
Mutex.hpp:- #pragma once
 - #include<pthread.h>
 - class Mutex{
 - public:
 -     Mutex(const pthread_mutex_t &mtx):mtx_(mtx){
 -         pthread_mutex_lock(&mtx_);
 -     }
 -     ~Mutex(){
 -         pthread_mutex_unlock(&mtx_);
 -     }
 - private:
 -     pthread_mutex_t mtx_;
 - };
 
  复制代码 main: 
[code]#include#include#include#include#include#include "Mutex.hpp"int tickets=10000;pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;class ThreadData{public:    pthread_t m_tid;    char m_buffer[64];};void *getTicket(void *args){    ThreadData* td=static_cast(args);    long long getnum=0;    while(true){        {            Mutex m(mutex);            usleep(1254);            if(tickets>0){                std::cout |   
            
        
 
  
 | 
| 
        
        
        
        
        
        
 | 
| 
 | 
  相关推荐
  
 | 
| 
 |