go条件变量同步机制

sync.Cond代表条件变量,需要配置锁才能有用

package main

import (
    "fmt"
    "runtime"
    "sync"
    "time"
)

func main() {

    runtime.GOMAXPROCS(4)

    testCond()
}

func testCond() {

    c := sync.NewCond(&sync.Mutex{})
    condition := false

    go func() {
        time.Sleep(time.Second * 1)
        c.L.Lock()                                //3 获得锁
        fmt.Println("[1] 变更condition状态,并发出变更通知.")
        condition = true
        c.Signal() //c.Broadcast()                //4 唤醒阻塞的main程,但是由于锁还没有释放,main抢不到锁会继续向下执行
        time.Sleep(1 * time.Second)
        fmt.Println("[1] 继续后续处理.")
        c.L.Unlock() //5 释放锁,main抢到锁,接着执行

    }()

    c.L.Lock()                                                     //1 先获得锁
    fmt.Println("[2] condition..........1")
    for !condition {
        fmt.Println("[2] condition..........2")
        //等待Cond消息通知
        c.Wait()                                            //2 阻塞main,释放锁
        fmt.Println("[2] condition..........3")                   //6 go程释放了锁 获得锁然后继续执行
    }
    fmt.Println("[2] condition..........4")
    c.L.Unlock()                                            //7解锁
    time.Sleep(1 * time.Second)
    fmt.Println("main end...")
}

来自为知笔记(Wiz)

原文地址:https://www.cnblogs.com/hualou/p/12069929.html

时间: 2024-10-08 21:52:58

go条件变量同步机制的相关文章

python多线程编程(4): 条件变量同步

互斥锁是最简单的线程同步机制,Python提供的Condition对象提供了对复杂线程同步问题的支持.Condition被称为条件变量,除了提供与Lock类似的acquire和release方法外,还提供了wait和notify方法.线程首先acquire一个条件变量,然后判断一些条件.如果条件不满足则wait:如果条件满足,进行一些处理改变条件后,通过notify方法通知其他线程,其他处于wait状态的线程接到通知后会重新判断条件.不断的重复这一过程,从而解决复杂的同步问题. 可以认为Cond

python多线程编程5: 条件变量同步-乾颐堂

互斥锁是最简单的线程同步机制,Python提供的Condition对象提供了对复杂线程同步问题的支持.Condition被称为条件变量,除了提供与Lock类似的acquire和release方法外,还提供了wait和notify方法.线程首先acquire一个条件变量,然后判断一些条件.如果条件不满足则wait:如果条件满足,进行一些处理改变条件后,通过notify方法通知其他线程,其他处于wait状态的线程接到通知后会重新判断条件.不断的重复这一过程,从而解决复杂的同步问题. 可以认为Cond

线程的互斥锁和条件变量通信机制

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <time.h> 4 #include <pthread.h> 5 6 #define BUFFER_SIZE 2 7 struct prodcons 8 { 9 int buffer[BUFFER_SIZE]; 10 pthread_mutex_t lock; 11 int readpos,writepos; 12 pthread_cond_t no

练习生产者与消费者-PYTHON多线程中的条件变量同步

以前练习过,但好久不用,手生,概念也生了, 重温一下.. URL: http://www.cnblogs.com/holbrook/tag/%E5%A4%9A%E7%BA%BF%E7%A8%8B/ ~~~~~~~ 互斥锁是最简单的线程同步机制,Python提供的Condition对象提供了对复杂线程同步问题的支持.Condition被称为条件变量,除了提供与Lock类似的acquire和release方法外,还提供了wait和notify方法.线程首先acquire一个条件变量,然后判断一些条件

(转载)Linux 多线程条件变量同步

条件变量是线程同步的另一种方式,实际上,条件变量是信号量的底层实现,这也就意味着,使用条件变量可以拥有更大的自由度,同时也就需要更加小心的进行同步操作.条件变量使用的条件本身是需要使用互斥量进行保护的,线程在改变条件状态之前必须首先锁住互斥量,其他线程在获得互斥量之前不会察觉到这种改变,因为互斥量必须在锁定之后才能计算条件. 模型 #include<pthread.h> pthread_cond_t cond //准备条件变量 pthread_cond_t cond = PTHREAD_CON

条件变量同步 -- Condition

Python提供的Condition对象提供了对复杂线程同步问题的支持.Condition被称为条件变量,除了提供与Lock类似的acquire和release方法外,还提供了wait和notify方法.线程首先acquire一个条件变量,然后判断一些条件.如果条件不满足则wait:如果条件满足,进行一些处理改变条件后,通过notify方法通知其他线程,其他处于wait状态的线程接到通知后会重新判断条件.不断的重复这一过程,从而解决复杂的同步问题. 上图中def_A和def_B两个方法是相互依赖

python threading之条件变量同步

有一类线程需要满足条件之后才能够继续执行,Python提供了threading.Condition 对象用于条件变量线程的支持,它除了能提供RLock()或Lock()的方法外,还提供了 wait().notify().notifyAll()方法.wait([timeout]):线程挂起,直到收到一个notify通知或者超时(可选的,浮点数,单位是秒s)才会被唤醒继续运行.wait()必须在已获得Lock前提下才能调用,否则会触发RuntimeError.调用wait()会释放Lock,直至该线

27 python 初学(信号量、条件变量、同步条件、队列)

参考博客: www.cnblogs.com/yuanchenqi/articles/5733873.html  semaphore 信号量: condition 条件变量: event 同步条件:条件同步和条件变量同步差不多意思,只是少了锁功能.因为条件同步设计于别访问共享资源的条件环境 多线程利器(queue):队列本身有一把锁 q.put('xiaoming', 0) q.get(0) q.qsize()  返回队列大小 q.empty() q.full() semaphore: # _au

理解 Linux 条件变量

理解 Linux 条件变量 1 简介 当多个线程之间因为存在某种依赖关系,导致只有当某个条件存在时,才可以执行某个线程,此时条件变量(pthread_cond_t)可以派上用场.比如: 例1: 当系统不忙(这是一个条件)时,执行扫描文件状态的线程. 例2: 多个线程组成线程池,只有当任务队列中存在任务时,才用其中一个线程去执行这个任务.为避免惊群(thrundering herd),可以采用条件变量同步线程池中的线程. 2 用法 条件变量(pthread_cond_t)必须与锁(pthread_