condition_variable与多线程,互斥锁

简介: condition_variable与多线程,互斥锁
// condition.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <mutex>
#include <thread>
#include <condition_variable>
#include <Windows.h>
#include <time.h>
#include <chrono>
using namespace std;
mutex g_mtx;
mutex ExitMtx;
timed_mutex timemtx;
int data[2000] = { 0 };
int pos = 0;
int max = 0;
condition_variable cv;
HANDLE g_mtxHandle = nullptr;
bool ExitFlag = false;
// display
void display()
{
  int cnt = 0;
  while (cnt++ < 200)
  {
    if (timemtx.try_lock_for(chrono::milliseconds(2000)))
    {
      cout << "display: " << data[cnt] << endl;
      Sleep(500);
      timemtx.unlock();
    }
    else
    {
      cout << "display time out ......." << endl;
    }
  } 
}
// consumer
void Consumer(){
  int cnt = 0;
  int postion = 0;
  while (cnt++ < 20)
  {
    Sleep(2000);
    if (timemtx.try_lock_for(chrono::milliseconds(2000)))
    {
      for (int i = 0; i < 10; ++i)
      {
        data[postion++] = max++;
        cout << "Consumer max:  " << max << endl;
      }
      timemtx.unlock();
    }
    else
    {
      cout << "Consumer time out ......." << endl;
    }
    if (cnt == 10)
    {
      ExitFlag = true;
      cv.notify_one();
      return;
    }
  }
}
int _tmain(int argc, _TCHAR* argv[])
{
  thread t1 = thread(Consumer);
  thread t2 = thread(display);
  std::unique_lock<std::mutex> lk(ExitMtx);
  //cv.wait(lk, []{return ExitFlag; });
  if (cv.wait_for(lk, chrono::seconds(1)) == std::cv_status::no_timeout)
  {
            cout << "waited ExitFlag....." << endl;
 }
else{ 
cout << "waited ExitFlag time out....." << endl;
}
t1.join();
t2.join();
return 0;
}
相关文章
|
27天前
|
Java 开发者
Java多线程教程:使用ReentrantLock实现高级锁功能
【4月更文挑战第6天】`ReentrantLock`是Java并发编程中一个强大的同步工具,比`synchronized`提供更丰富功能。它支持可响应性、可中断性、公平性选择及条件变量。通过示例展示了创建、公平性设置、可中断锁定、尝试锁定及条件变量的使用。`ReentrantLock`使线程同步更灵活,适用于高性能应用,但使用需谨慎,理解其原理并恰当使用。
|
27天前
|
安全 Java
深入Java并发编程:线程同步与互斥机制
【4月更文挑战第6天】Java并发编程中,确保数据一致性与防止条件竞争是关键。语言提供`synchronized`关键字、`Lock`接口和原子变量等机制处理并发问题。线程同步问题包括竞态条件、死锁和活锁。`synchronized`实现内置锁,`Lock`接口提供更灵活的锁管理,原子变量则支持无锁安全操作。理解并恰当使用这些工具能有效管理并发,避免数据不一致。
|
27天前
|
安全 Java
java保证线程安全关于锁处理的理解
了解Java中确保线程安全的锁机制:1)全局synchronized方法实现单例模式;2)对Vector/Collections.SynchronizedList/CopyOnWriteArrayList的部分操作加锁;3)ConcurrentHashMap的锁分段技术;4)使用读写锁;5)无锁或低冲突策略,如Disruptor队列。
18 2
|
3天前
|
Java 程序员 开发者
深入理解Java并发编程:线程同步与锁机制
【4月更文挑战第30天】 在多线程的世界中,确保数据的一致性和线程间的有效通信是至关重要的。本文将深入探讨Java并发编程中的核心概念——线程同步与锁机制。我们将从基本的synchronized关键字开始,逐步过渡到更复杂的ReentrantLock类,并探讨它们如何帮助我们在多线程环境中保持数据完整性和避免常见的并发问题。文章还将通过示例代码,展示这些同步工具在实际开发中的应用,帮助读者构建对Java并发编程深层次的理解。
|
3天前
|
Linux API C++
c++多线程——互斥锁
c++多线程——互斥锁
|
3天前
|
消息中间件 安全 算法
通透!从头到脚讲明白线程锁
线程锁在分布式应用中是重中之重,当谈论线程锁时,通常指的是在多线程编程中使用的同步机制,它可以确保在同一时刻只有一个线程能够访问共享资源,从而避免竞争条件和数据不一致性问题。
|
9天前
|
Java 调度
Java中的并发编程:从线程到锁的探索
在Java的并发编程中,线程与锁是构建高效、稳定多线程应用程序的关键要素。本文将带你走进Java并发编程的世界,从线程的基础知识讲起,逐步深入到锁的实现与应用,旨在让读者对Java并发编程有更深入的理解,并能在实际开发中灵活运用。
|
9天前
|
安全 Linux 调度
【linux线程(二)】线程互斥与线程同步
【linux线程(二)】线程互斥与线程同步
|
14天前
|
算法 Java 编译器
【JavaEE多线程】掌握锁策略与预防死锁
【JavaEE多线程】掌握锁策略与预防死锁
20 2
|
14天前
|
安全 Java 编译器
【JavaEE多线程】线程安全、锁机制及线程间通信
【JavaEE多线程】线程安全、锁机制及线程间通信
32 1