`

Linux C并发控制

阅读更多

Linux线程接口也称为pthread或POSIX线程,Linux2.6以后,采用Native POSIX线程库的新线程实现。

1, 互斥量

    头文件<pthread.h> pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER;

    静态分配:

    pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER;

    int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr)

    int pthread_mutex_destroy(pthread_mutex_t *mutex)

    操作函数:

    int pthread_mutex_lock(pthread_mutex_t *mutex)

    int pthread_mutex_trylock(pthread_mutex_t *mutex)

    int pthread_mutex_unlock(pthread_mutex_t *mutex)

    互斥量类型:

  •     同一线程不应对同一互斥量加锁两次
  •     线程不应对不为自己拥有的互斥量解锁
  •     线程不应对一个尚未锁定的互斥量做解锁动作。

    PTHREAD_MUTEX_NORMAL:不具有死锁检测功能,如线程试图对已由自己锁定的互斥量加锁,则发生死锁,互斥量处于未锁定状态,或者已由其他线程锁定,对其解锁会导致不确定的结果(在Linux上,对这类互斥量的上述两种操作都会成功)。

    PTHREAD_MUTEX_ERRORCHECK:所有操作会执行错误检查,所有上述3种情况都会导致相关的函数返回错误,运行起来比一般要慢。

    PTHREAD_MUTEX_RECURSIVE:递归互斥量维护一个计数器,加锁递增计数器,解锁递减计数器,为0时,释放该互斥量。

2,读写锁

    <pthread.h>

    int pthread_rwlock_init(pthread_rwlock_t *restict rwlock, const pthread_rwlockattr_t *restrict attr);

    int pthread_rwlock_destroy(pthread_rwlock_t *restict rwlock);

    int pthread_rwlock_rdlock(pthread_rwlock_t *restict rwlock);

    int pthread_rwlock_wrlock(pthread_rwlock_t *restict rwlock);

    int pthread_rwlock_unlock(pthread_rwlock_t *restict rwlock);
3,条件变量

    <pthread.h>

    int pthread_cond_init(pthread_cond_t *restict cond, const pthread_condattr_t *restrict attr);

    int pthread_cond_destroy(pthread_cond_t *cond);

    int pthread_cond_wait(pthread_cond_t *restict cond, pthread_mutex_t *restrict cond);

    int pthread_cond_timedwait(pthread_cond_t *restict cond, pthread_mutex_t *restrict mutex, const struct timespec *restrict tsptr);

   int pthread_cond_signal(pthread_cond_t *cond);

    int pthread_cond_broadcast(pthread_cond_t *cond);

4,自旋锁

    <pthread.h>

    int pthread_spin_init(pthread_spinlock_t *lock,int pshared);

    int pthread_spin_destroy(pthread_spinlock_t *lock);

    int pthread_spin_lock(pthread_spinlock_t *lock);

    int pthread_spin_trylock(pthread_spinlock_t *lock);

    int pthread_spin_unlock(pthread_spinlock_t *lock);

5,屏障

    屏障是用户协调多个线程并行工作的同步机制,允许每个线程等待,直到有合作的线程都到达某一点,然后从该点继续执行。

    int pthread_barrier_init(pthread_barrier_t *restrict barrier, const pthread_barrierattr_t *restrict attr, unsigned int count)

    int pthread_barrier_destroy(pthread_barrier_t *barrier)

    int pthread_barrier_wait(pthread_barrier_t *barrier)

分享到:
评论

相关推荐

    Linux C语言 线程池 状态机 并发处理Demo

    本项目提供了一个关于“Linux C语言线程池、状态机和并发处理”的Demo,非常适合初学者理解和实践多线程技术。下面将详细阐述这些知识点。 首先,线程池是一种线程管理机制,它预先创建了一组线程,待有任务需要...

    Linux驱动并发控制之位原子操作.pdf

    驱动源码文件 atomic_bit.c 是 Linux 驱动并发控制之位原子操作的实现文件。该文件中定义了位原子变量 value_bit,并实现了 open 和 release 函数来控制对共享资源的访问。 在 open 函数中,首先判断 value_bit ...

    Linux c语言实现控制台玩俄罗斯方块

    综上所述,实现一个Linux控制台版的俄罗斯方块游戏需要深入理解C语言编程、线程管理、控制台交互以及基本的算法设计。这是一个很好的练习项目,可以帮助开发者巩固基础技能,提升系统级编程能力。

    linux高并发服务器带数据库操作

    在构建高性能的Linux服务器以处理高并发场景时,结合C语言编程和MySQL数据库操作是常见的技术选择。这里我们将深入探讨如何利用Linux系统特性、C语言编程技巧以及优化SQL查询来实现这一目标。 首先,理解Linux操作...

    linux 设备驱动中的并发控制

    在Linux设备驱动开发中,并发控制是一个至关重要的概念,它涉及到多线程、中断处理以及系统资源的高效安全共享。《Linux设备驱动开发详解》一书由宋宝华撰写,人民邮电出版社出版,深入浅出地介绍了这一主题。本文将...

    linux并发回音服务器与客户端

    1. **网络通信基础**:在“并发回音服务器”中,我们主要关注的是TCP(传输控制协议)或UDP(用户数据报协议)。TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,适合需要稳定、无丢失的数据传输场景。而...

    Linux C语言实现串口收发数据

    总的来说,通过学习和实践这个Linux C语言串口通讯Demo,开发者可以掌握在Linux系统中控制串口的基本技巧,这对于开发涉及串口通信的嵌入式系统、物联网设备或者任何需要硬件交互的应用来说都是非常有价值的。

    Linux环境C语言调用Mplayer实现音乐播放器(其中缺少了一个FIFO管道文件)

    总的来说,这个项目不仅涵盖C语言的基本编程,还涉及到了高级的Linux系统编程和并发编程技术,是学习和提升这些技能的一个绝佳实践。通过这样的实践,开发者可以更深入地理解和掌握操作系统的工作原理,以及如何利用...

    linux socket 并发C/S模型

    本文将深入探讨如何使用C语言实现基于TCP协议的并发客户端/服务器(C/S)模型,并利用`select`函数来处理多路复用,提高系统的并发性能。 首先,TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层...

    linux GTK 并发

    总的来说,这个示例程序涵盖了Linux系统编程中的重要概念,如GUI编程、并发控制和进程管理,是学习和理解这些主题的好例子。通过分析和理解这个程序,开发者可以提升在Linux环境下构建复杂应用的能力。

    嵌入式Linux C语言应用程序设计 光盘

    嵌入式Linux C语言应用程序设计是一门涵盖广泛的学科,它涉及到计算机硬件、操作系统以及软件开发等多个领域。在嵌入式系统中,C语言是主要的编程语言,因为它的效率高、可移植性强,并且能够直接操作硬件资源。下面...

    增加并发控制后的globalmem程序

    增加并发控制后的globalmem程序

    linux c语言示例代码

    1. **Linux系统调用**:C语言在Linux下可以直接调用操作系统内核提供的接口,如open()、read()、write()等,进行文件操作,或者fork()、exec()、wait()等进行进程控制。这些系统调用是理解操作系统工作原理的基础。 ...

    linux中实现的三个并发程序的誊抄(c语言)

    在给定的程序示例中,通过C语言编写了四个源程序:main.c、get.c、copy.c和put.c,这些程序共同协作完成从文件\a.txt读取数据,经过两个缓冲区的传递,最后写入到\b.txt。以下是这个并发程序设计的关键知识点: 1. ...

    linux 下的c语言

    C语言的基础包括变量、数据类型(如int、char、float等)、运算符、控制流程(如if语句、switch语句、for循环和while循环)以及函数。这些是编程的基本构建块,理解和掌握它们是编写任何C程序的第一步。 Linux环境...

    Linux C语言函数手册

    《Linux C语言函数手册》是C程序员在Linux环境下不可或缺的参考资料。这本手册详细记录了C语言中的各种标准库函数,以及与Linux系统接口相关的函数,对于深入理解和使用C语言编程至关重要。以下将对其中的一些关键...

    linux_c.rar c语言 源代码

    2. **驱动程序开发**:Linux设备驱动通常用C语言编写,因为C语言可以直接操作内存和硬件,方便实现对硬件的精确控制。 3. **用户空间应用程序**:C语言也常用于编写Linux环境下的用户空间应用程序,如文本编辑器、...

    linux C语言实现yuyv拍照保存并转为jpeg格式

    在Linux系统中,C语言是实现底层编程和设备交互的常用工具,特别是在处理硬件设备如摄像头时。本项目聚焦于如何使用C语言读取Video for Linux Two (V4L2) 接口的YUV422(YUYV)格式图像数据,并将其转换为JPEG格式...

    tcp_server_v1.rar_linux TCP并发_linux tcp server

    在Linux系统中,TCP(传输控制协议)是网络通信中常用的一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP并发服务器是指能够同时处理多个客户端连接请求的服务器,这对于高并发的网络应用至关重要。本项目...

Global site tag (gtag.js) - Google Analytics