• Linux c++ 试验9 锁使用


    #include <iostream>	      // std::cout
    #include <thread>	      // std::thread
    #include <mutex>	      // std::mutex, std::unique_lock
    #include <condition_variable> // std::condition_variable
    
    std::mutex mtx;		    // 全局互斥锁.
    std::condition_variable cv; // 全局条件变量.
    bool ready = false;	    // 全局标志位.
    
    void do_print_id(int id)
    {
    	std::unique_lock<std::mutex> lck(mtx);
    	while (!ready)	      // 如果标志位不为 true, 则等待...
    		cv.wait(lck); // 当前线程被阻塞, 当全局标志位变为 true 之后,wait后释放锁
    	// 线程被唤醒, 继续往下执行打印线程编号id.
    	std::cout << "thread " << id << '\n';
    }
    
    void go()
    {
    	std::unique_lock<std::mutex> lck(mtx);
    	ready = true;	 // 设置全局标志位为 true.
    	cv.notify_all(); // 唤醒所有线程.
    }
    
    int main()
    {
    
    	std::thread threads[10];
    	// spawn 10 threads:
    	for (int i = 0; i < 10; ++i)
    		threads[i] = std::thread(do_print_id, i);
    
    	std::cout << "10 threads ready to race...\n";
    	go(); // go!
    
    	for (auto &th : threads)
    		th.join();
    
    	//     while (1)
    	//     {
    	// 	_sleep(1);
    	//     }
    
    	return 0;
    }
    
  • 相关阅读:
    CFree 提示main must return int
    策略模式
    CFree 提示no newline at the end of file
    EEPROM的写入操作解析
    一些关于mic的知识
    一些关于电池的资料
    太阳能电池板日发电量简易计算方法
    ubuntu 下载编译android源代码
    SC44B0的内存地址解析
    RequireJS 2.0 学习笔记一
  • 原文地址:https://www.cnblogs.com/zhaogaojian/p/16420662.html
Copyright © 2020-2023  润新知