条件锁类

#include <pthread.h>

    class CTestLock
    {
    public:
        CTestLock()        { pthread_mutex_init(&mutex_t_, NULL);  pthread_cond_init(&cond_t_, NULL);      }
        ~CTestLock()       { pthread_mutex_destroy(&mutex_t_);     pthread_cond_destroy(&cond_t_);          }
        int Lock()          { int nRetCode = pthread_mutex_lock(&mutex_t_);         return (nRetCode == 0); }
        int Unlock()      { int nRetCode = pthread_mutex_unlock(&mutex_t_);       return (nRetCode == 0); }
        int Wait()           { int nRetCode = pthread_cond_wait(&cond_t_,&mutex_t_); return (nRetCode == 0); }
        int Signal()       { int nRetCode = pthread_cond_signal(&cond_t_);          return (nRetCode == 0); }
        int Broadcast()   { int nRetCode = pthread_cond_broadcast(&cond_t_);      return (nRetCode == 0); }

    private:
        pthread_mutex_t mutex_t_;
        pthread_cond_t cond_t_;
    };

条件锁类

时间: 2024-08-13 15:25:05

条件锁类的相关文章

MDL--元数据锁的锁请求与锁等待+元数据锁类对象

1 元数据锁的锁请求与锁等待 元数据锁在MySQL Server层,按照锁的状态被细分为两种,一种是已经施加的锁,一种是等待施加的锁即锁请求,这样被区分的原因,如MySQL对"class MDL_request"的代码注释作了解释: /** A pending metadata lock request. A lock request and a granted metadata lock are represented by different classes because the

条件锁

ReentrantLock类有一个方法newCondition用来生成这个锁对象的一个条件(ConditionObject)对象,它实现了Condition接口.Condition提供了线程通讯的一套机制await和signal等线程间进行通讯的方法.. 1.适用场景 当某线程获取了锁对象,但因为某些条件没有满足,需要在这个条件上等待,直到条件满足才能够往下继续执行时,就需要用到条件锁. 这种情况下,线程主动在某条件上阻塞,当其它线程发现条件发生变化时,就可以唤醒阻塞在此条件上的线程. 2.使用

递归锁+条件锁+互斥锁-04-多线程

1 // 2 // ViewController.m 3 // 05-递归锁(recursive)+条件锁(condition) 4 // 5 // Created by mac on 16/4/20. 6 // Copyright © 2016年 mac. All rights reserved. 7 // 8 /* 9 10 3). 互斥锁 11 NSLock *_lock; 12 13 3)NSLock :不能多次调用,会产生死锁 14 15 2016-04-20 16:06:44.600

NSConditionLock 条件锁

有时候不是简单的需要 加锁/解锁, 而是需要根据一定条件满足后进行 加锁/解锁. 以一个生产中与消费者的例子,介绍条件锁的用法. static NSInteger CONDITION_NO_DATA //条件一: 没有数据 static NSInteger CONDITION_HAS_DATA //条件二: 有数据 //初始化锁时,指定一个默认的条件 NSConditionLock *lock = [[NSConditionLock alloc] initWithCondition:CONDIT

条件特性类

//如果没有定义 wjire 或者 refuge, //编译器不会再元数据中生成特性信息,也就是说利用反射找不到特性信息 //但是,特性类的定义元数据和实现仍在程序集中 //#define wjire #define refuge using System; using System.Diagnostics; using System.Reflection; namespace Test3 { [Cond] class Program { static void Main(string[] ar

synchronized关键字以及实例锁 类锁

Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 一.当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行.另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块. 二.然而,当一个线程访问object的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该object中的非synchronized(this)同步代码块.

Java进阶(8) - 并发(多线程锁类)

一共有3类锁 ,方法锁.对象锁.类锁.(方法锁也是对象锁的一种)一.对象锁对象锁public class object {private Lock lock = new ReentrantLock();//JavaSE1.5.新增了一个java.util.concurrent包来支持同步public void method(){synchronized(this){System.out.println("我是对象锁");}}} public synchronized void meth

java对象锁&amp;类锁

首先,来看一段代码. 1 public class PersonSet { 2 3 private final Set<Person> mySet = new HashSet<Person>(); 4 5 public synchronized void add(Person p){ 6 mySet.add(p); 7 } 8 9 public synchronized boolean contains(Person p){ 10 return mySet.contains(p);

条件锁condition与Queue()

在学习之前你应该先了解锁和队列基础 import queue import time import random import threading import asyncio import logging # from queue import Empty logging.basicConfig(level = logging.INFO,format = '%(asctime)s - %(levelname)s -->%(funcName)s at line %(lineno)d: \n %(