Linux的互斥锁、条件锁的用法

简介: Linux的互斥锁、条件锁的用法

举例来说,这边从某处读取数据到缓冲区,那边将缓冲区数据进行处理。

pthread_cond_t  data_cond;
pthread_mutex_t data_mutex;
#define DATA_SIZE 4096
int   data_flag = 0;
int   data_size = 0;
char  data_buffer[DATA_SIZE];
void read_to_databuffer()
{
    //init fd
    while (1)
    {
        //已读取的数据还没有被处理,等待。或者用另外的条件锁?
        while (data_flag == 1)
        {
            usleep(1000);
            continue;
        }
        pthread_mutex_lock(&data_mutex);
        data_size = read(fd, data_buffer, DATA_SIZE);
        //已经没有数据,中断。
        if (data_size <= 0)
        {
            pthread_mutex_unlock(&data_mutex);
            break;
        }
        //设置数据标志,发出通知
        data_flag = 1;
        pthread_cond_signal( &data_cond);
        pthread_mutex_unlock(&data_mutex);
    }
    //release
}
void databuffer_to_process()
{
    while (1)
    {
        pthread_mutex_lock(&data_mutex);
        //没有数据,进入条件锁
        if (data_flag == 0)
        {
            //有人问,两边都先lock……其实这里有一个先释放锁的动作。
            pthread_cond_wait(&data_cond, &data_mutex);
        }
        //处理数据
        //结束处理
        data_flag = 0;
        pthread_mutex_unlock(&data_mutex);
    }
    //release
}
void start()
{
    pthread_t tid1, tid2;
    pthread_mutex_init(&data_mutex, NULL);
    pthread_cond_init( &data_cond,  NULL);
    pthread_create(&tid1, NULL, read_to_databuffer,    NULL);
    pthread_create(&tid2, NULL, databuffer_to_process, NULL);
}
目录
相关文章
|
4天前
|
安全 网络协议 Linux
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。通过掌握 ping 命令,读者可以轻松测试网络连通性、诊断网络问题并提升网络管理能力。
19 3
|
8天前
|
Linux 数据库
Linux内核中的锁机制:保障并发操作的数据一致性####
【10月更文挑战第29天】 在多线程编程中,确保数据一致性和防止竞争条件是至关重要的。本文将深入探讨Linux操作系统中实现的几种关键锁机制,包括自旋锁、互斥锁和读写锁等。通过分析这些锁的设计原理和使用场景,帮助读者理解如何在实际应用中选择合适的锁机制以优化系统性能和稳定性。 ####
25 6
|
1月前
|
Ubuntu Linux
Linux的基础用法
Linux的基础用法
22 6
|
2月前
|
监控 Linux
Linux系统中du命令与df命令的区别与用法
总的来说,`du` 和 `df` 在磁盘管理中互补使用,能够提供全面的磁盘空间使用信息,帮助用户和管理员有效地监控和管理系统资源。
79 3
|
1月前
|
安全 Linux
Linux线程(十一)线程互斥锁-条件变量详解
Linux线程(十一)线程互斥锁-条件变量详解
|
2月前
|
存储 Ubuntu Linux
linux中的find 命令详细用法
本文介绍了如何将 `find` 命令与 `exec` 结合使用,通过具体示例展示了多种应用场景,如显示文件属性、重命名文件、收集文件大小、删除特定文件、执行工具、更改文件所有权和权限、收集 MD5 值等。文章还探讨了 `{} \;` 和 `{} +` 的区别,并演示了如何结合 `grep` 命令进行内容搜索。最后,介绍了如何在一个 `find` 命令中使用多个 `exec` 命令。这为 Linux 用户提供了强大的文件管理和自动化工具。
|
3月前
|
监控 关系型数据库 MySQL
在Linux中,mysql的innodb如何定位锁问题?
在Linux中,mysql的innodb如何定位锁问题?
|
3月前
|
存储 运维 监控
运维.Linux下执行定时任务(上:Cron简介与用法解析)
运维.Linux下执行定时任务(上:Cron简介与用法解析)
51 0
|
4月前
|
JavaScript Linux
【详细讲解】Linux grep命令用法大全 片尾有示例搜索指定目录中指定文件后缀的指定字符
【详细讲解】Linux grep命令用法大全 片尾有示例搜索指定目录中指定文件后缀的指定字符
125 1
|
5月前
|
监控 Linux 数据处理
lslocks:Linux系统中的锁信息查看利器
`lslocks`是Linux工具,用于查看系统上的文件锁信息,帮助诊断进程同步问题。它显示持有锁的进程、锁类型(如POSIX、flock)和状态。通过简洁的输出,用户能识别死锁和资源争用,优化性能。结合其他命令如`grep`和`awk`可增强分析能力。需适当权限运行,定期监控以预防并发访问问题,处理死锁时要谨慎。