胶州网站建设dch100,微信定制开发,iis创建网站,wordpress 分类过滤1、什么是互斥锁#xff1f; 
互斥锁是#xff08;Mutex#xff09;是一种用于多线程编程的同步原语#xff0c;用于确保在多个线程访问共享资源时的互斥性。 
在多线程环境中#xff0c;当多个线程同时访问共享资源时#xff0c;可能会导致数据的竞争和不一致问题。为了…1、什么是互斥锁 
互斥锁是Mutex是一种用于多线程编程的同步原语用于确保在多个线程访问共享资源时的互斥性。 
在多线程环境中当多个线程同时访问共享资源时可能会导致数据的竞争和不一致问题。为了避免这种问题需要确保在任何时候只有一个线程能够访问共享资源而其他线程需要等待直到资源可用。 
互斥锁提供这样一种机制即在某个线程访问共享资源时它会有互斥锁其他线程需要等待互斥锁的释放才能访问共享资源。一旦线程完成对共享资源的访问它会释放互斥锁以便其他线程可以获取互斥锁并访问共享资源。 2、互斥锁的基本操作包括两个重要的步骤加锁和解锁 
加锁Lock:当一个线程需要访问共享资源时它会尝试获取互斥锁。如果互斥锁当前没有被其他线程持有那么该线程就能够获取互斥锁继续执行访问共享资源的代码。如果互斥锁已经被其他线程持有那么该线程会进入堵塞状态等待互斥锁的释放。 
解锁Unlock:当一个线程完成对共享资源的访问时它会释放互斥锁以便其他线程可以获取互斥锁并访问共享资源。 3、示例代码 
main.cpp 
#include iostream
#include thread
#include mutexstd::mutex mtx;
int sharedResource  0;void increment()
{for (int i0; i5; i){std::lock_guardstd::mutex lock(mtx); // 使用 std::lock_guard 创建互斥锁的作用域确保每次只有一个线程可以访问 sharedResourcesharedResource;std::cout  Increatmented, value:   sharedResource  std::endl;} // 在作用域结束时std::lock_guard 会自动释放互斥锁
}void decrement()
{for (int i0; i 5; i){std::lock_guardstd::mutex lock(mtx);sharedResource--;std::cout  Decremented, value:   sharedResource  std::endl;}
}int main()
{// 创建了两个线程 t1 和 t2std::thread t1(increment);std::thread t2(decrement);// 等待这两个线程的执行结束t1.join();t2.join();std::cout  Final shared resource value:   sharedResource  std::endl;return 0;
}CmakeList.txt 
cmake_minimum_required(VERSION 3.5)project(untitled2 LANGUAGES CXX)set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(Threads REQUIRED)
add_executable(untitled2 main.cpp)#include(GNUInstallDirs)
#install(TARGETS untitled2
#    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
#    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
#)target_link_libraries(untitled2 Threads::Threads) 程序输出 
23:12:22: Starting /home/lrj/build-untitled2-Desktop_Qt_5_15_2_GCC_64bit-Debug/untitled2...
Increatmented, value: 1
Increatmented, value: 2
Increatmented, value: 3
Increatmented, value: 4
Increatmented, value: 5
Decremented, value: 4
Decremented, value: 3
Decremented, value: 2
Decremented, value: 1
Decremented, value: 0
Final shared resource value: 0
23:12:22: /home/lrj/build-untitled2-Desktop_Qt_5_15_2_GCC_64bit-Debug/untitled2 退出退出代码: 0 
由输出信息可见increament对共享资源访问的时候decrement是堵塞的。