0
点赞
收藏
分享

微信扫一扫

[Day 76] 區塊鏈與人工智能的聯動應用:理論、技術與實踐

践行数据分析 2024-09-16 阅读 17

目录

一、同步的概念

为什么需要同步呢?

二、条件变量

条件变量的相关概念

1、条件变量的初始化:静态初始化、动态初始化 

2、条件变量的等待:pthread_cond_wait函数

工作原理及流程【重要!】

关键点总结

3、条件变量的激发(通知)


一、同步的概念

此处的同步的概念和我们生活中所理解的同步并不是一回事。我们常说的同步,其意义更贴近于在在同一时间内同时执行多个任务,实际上,这在进程/线程调度的理念中叫做并行。

进程/线程间同步实际上所指的是协调多个线程或进程的执行顺序,以确保它们以一致和正确的方式访问共享资源。即:在保证数据安全的前提下, 让线程能够按照某种特定的顺序访问临界资源,从而有效避免饥饿问题,叫做同步。

二、条件变量

在 Linux 中,条件变量(condition variable)是一个用于线程间同步的机制。它允许线程在某些条件满足之前挂起执行,并在条件满足时被唤醒。

条件变量的相关概念

  1. 条件变量(condition variable): 是一种同步机制,通常与互斥锁(mutex)一起使用。它用于实现线程间的等待和通知机制。

  2. 等待队列: 当线程在条件变量上调用 pthread_cond_wait 函数时,它会释放相关的互斥锁进入一个等待队列中此时线程会被挂起,直到另一个线程通过条件变量的 pthread_cond_signal 或 pthread_cond_broadcast 函数唤醒它。

  3. 互斥锁: 条件变量的使用必须与互斥锁配合使用,以确保在检查条件和改变条件时的原子性。

1、条件变量的初始化:静态初始化、动态初始化 

2、条件变量的等待:pthread_cond_wait函数

3、条件变量的激发(通知)

3.1、一次唤醒单个线程的函数:pthread_cond_signal

3.2、一次唤醒全部线程的函数:pthread_cond_signal 

 3.3、需要注意的点!!!

  • 虚假唤醒: 即便条件不满足,pthread_cond_wait 也可能因为虚假唤醒而返回。因此,依赖于条件变量等待的代码经常在 while 循环中检查条件,以确保线程确实被因为条件成立而唤醒:
pthread_mutex_t mutex;
pthread_cond_t cond;
int condition;

// ...

void wait_for_condition() {
    while (!condition) {
        pthread_cond_wait(&cond, &mutex);
    }
    // condition 现在为真,执行其他工作...
}

3.4、对比总结

 要真正的理解同步,我们还需借助代码来理解。下一节我们将介绍使用互斥锁与条件变量实现的生产者消费者模型。

举报

相关推荐

0 条评论