// https://cplusplus.com/reference/mutex/mutex/
// mutex example
#include <iostream> // std::cout#include <thread> // std::thread#include <mutex> // std::mutex
std::mutex mtx; // mutex for critical section
void print_block (int n, char c){
// critical section (exclusive access to std::cout signaled by locking mtx):
mtx.lock();for(int i=0; i<n; ++i){
std::cout << c;}
std::cout <<'\n';
mtx.unlock();}
int main(){
std::thread th1 (print_block,50,'*');
std::thread th2 (print_block,50,'$');
th1.join();
th2.join();return0;}
std::unique_lock ,具有了自动上锁和解锁的功能
std::mutex mtx;
std::unique_lock<std::mutex> lck(mtx);
atomic
std::atomic<int64_t> value;
int64_t x = 10;value.store(x,std::memory_order_relaxed)
int64_t x = value.load(std::memory_order_relaxed);
// atomic::load/store example
#include <iostream> // std::cout#include <atomic> // std::atomic, std::memory_order_relaxed#include <thread> // std::thread
std::atomic<int> foo (0);# https://zh.cppreference.com/w/cpp/atomic/atomic !!!!
void set_foo(int x){
foo.store(x,std::memory_order_relaxed); // set value atomically
}
void print_foo(){
int x;do{
x = foo.load(std::memory_order_relaxed); // get value atomically
}while(x==0);
std::cout <<"foo: "<< x <<'\n';}
int main(){
std::thread first (print_foo);
std::thread second (set_foo,10);
first.join();
second.join();return0;}
Edit & run on cpp.sh