C++笔记--Linux编程(14)-线程同步

目录

线程同步技术

说明

互斥锁 

加锁和解锁函数 

使用mutex线程同步示例

读写锁

读写锁状态

读写锁特性

读写锁示例


线程同步技术

说明

        线程共享进程的内存空间,打开的文件描述符,全局变量。

        当有多个线程同时访问一块内存空间或者一个变量、一个文件描述符,如果不加控制,那么可能会出现意想不到的结果。

互斥锁 

        互斥(mutex)是相互排斥的意思,它是一种锁或者信号灯。

        互斥用来保护多个线程共享的数据和结构不会被同时修改,一个互斥锁只能有两个状态

                 locked---加锁

                unlocked---解锁

        加锁后互斥不让其他线程访问。

        任何时刻只能有一个线程来掌握某个互斥上锁。

        一个线程如果试图在一个已经加锁的互斥上再加锁,这个线程会被挂起,直到加锁的线程释放掉互斥锁为止。  

加锁和解锁函数 

pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_unlock(pthread_mutex_t *mutex);

PTHREAD_MUTEX_INITIALIZER是初始化一个快速锁的宏定义。

pthread_mutex_lock用于给mutex加锁。

pthread_mutex_unlock用于给mutex解锁。

需引入pthread.h

使用mutex线程同步示例

pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
void *func(void *arg)
{
	pthread_mutex_lock(&mutex);
	int *a = (int *)arg;
	printf("thread%d start\n", *a);
	int i;
	for(i=0;i<10;i++)
	{
		printf("thread%d is running\n", *a);
		sleep(1);
	}
	printf("thread%d end\n", *a);
	pthread_mutex_unlock(&mutex);
	pthread_exit(NULL);
}
int main(int arg, char * args[])
{
	printf("process start\n");
	pthread_t thr_d1, thr_d2;
	int i[2];
	i[0] = 1; i[1] =2;
	pthread_create(&thr_d1, NULL, func, &i[0]);
	pthread_create(&thr_d2, NULL, func, &i[1]);
	pthread_join(thr_d1, NULL);
	pthread_join(thr_d2, NULL);
	printf("process end\n");
	return 0;
}

读写锁

 与互斥锁类似,但读写允许更高的并行性。其特点:写独占,读共享

读写锁状态

 具备三种状态:

        1. 读模式下加锁状态(读锁)

        2. 写模式下加锁状态(写锁)

        3. 不加锁状态

读写锁特性

        1. 读写锁是“写模式加锁”时,解锁前,所有对该锁加锁的线程都会被阻塞

        2. 读写锁是“读模式加锁”时,如果线程以读模式对其加锁会成功;如果线程以写模式加锁会阻塞

读写锁示例

//
// Created by xiangjia on 2021/8/8.
//
#include "stdio.h"
#include "stdlib.h"
#include "unistd.h"
#include "pthread.h"
int beginnum = 100;

pthread_rwlock_t rwlock = PTHREAD_RWLOCK_INITIALIZER;

void* thr_write(void *arg) {
    while(1) {
        pthread_rwlock_wrlock(&rwlock);
        printf("--%s--self--%lu--%d\n", __FUNCTION__, pthread_self(), beginnum++);
        sleep(2);
        pthread_rwlock_unlock(&rwlock);
        sleep(3);
    }
}

void* thr_read(void*arg) {
    while (1) {
        pthread_rwlock_rdlock(&rwlock);
        printf("--%s--self--%lu--%d\n", __FUNCTION__, pthread_self(), beginnum++);
        sleep(2);
        pthread_rwlock_unlock(&rwlock);
        sleep(3);
    }
}

int main() {
    int n=8,i=0;
    pthread_t tid[8];
    for(i=0; i<5; i++) {
        pthread_create(&tid[i], NULL, thr_read, NULL);
    }
    for(; i<8; i++) {
        pthread_create(&tid[i], NULL, thr_write, NULL);
    }

    for(i=0; i<8; i++) {
        pthread_join(tid[i], NULL);
    }

    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Rc28-14控制器编程手册是一本用于指导用户对Rc28-14控制器进行编程的手册。Rc28-14控制器是一种先进的控制设备,广泛应用于各种工业领域。 该手册详细介绍了Rc28-14控制器的各个方面,包括硬件和软件。首先,手册介绍了控制器的基本概念和结构,使用户对其整体框架有一个清晰的了解。然后,手册详细讲解了每个控制器模块的功能和使用方法,如输入输出模块、通信模块和扩展模块等。 此外,手册还深入讲解了控制器的编程语言和开发工具。编程语言是用户与控制器进行交互和指挥的基础,手册提供了详细的语法规则和编程示例,使用户能够快速掌握编程技巧。开发工具则为用户提供了便捷的编程环境和调试工具,手册详细介绍了这些工具的使用方法和注意事项。 此外,手册还涵盖了对控制器的故障排除和维护。在使用控制器过程中,可能会遇到各种问题和故障,手册提供了常见问题的解决方案和维护建议,帮助用户更好地使用和维护控制器。 总之,Rc28-14控制器编程手册是一本全面而详细的指导书,为用户提供了使用和编程控制器的全面知识和技巧。无论是新手还是有经验的用户,都能从中获得帮助。 ### 回答2: RC28-14控制器编程手册是一本详细介绍RC28-14控制器编程方法和技巧的指南手册。该编程手册主要包括以下内容: 1. RC28-14控制器的概述:介绍了RC28-14控制器的基本结构、功能和特点,让用户能够快速了解该控制器的基本操作和设置。 2. 编程环境的搭建:介绍了RC28-14控制器编程所需的软件和硬件环境的搭建方法,包括控制器的驱动安装、编程软件的安装和配置等。 3. 编程语言:详细介绍了RC28-14控制器所支持的编程语言,如C语言、C++、Python等,以及各种语言的语法和特点,方便用户选择和使用合适的编程语言。 4. 编程示例:提供了一系列的编程示例,涵盖了RC28-14控制器的常用功能和应用场景,让用户能够通过模仿和借鉴示例代码来快速实现自己的控制任务。 5. 常见问题解答:列举了一些用户常见的问题和解答,帮助用户在编程过程中遇到问题时能够及时解决。 通过阅读RC28-14控制器编程手册,用户可以掌握控制器的编程方法和技巧,能够根据自己的需求开发出适合的控制应用程序。同时,该手册还提供了丰富的编程示例和问题解答,能够帮助用户在编程过程中遇到问题时能够快速解决。 ### 回答3: 《RC28-14控制器编程手册》是一本针对RC28-14控制器编程的手册。该手册主要介绍了RC28-14控制器的概述、基本操作、编程语言、程序结构、示例和常见问题等方面的内容。 首先,在概述部分,手册对RC28-14控制器的功能和特点进行了简要的介绍。它是一种先进的控制器,具有多种输入输出接口,适用于各种自动化控制系统。 其次,在基本操作部分,手册详细介绍了RC28-14控制器的安装和连接步骤,以及如何使用该控制器进行操作。包括电源连接、输入输出端口设置、通信接口配置等。 然后,在编程语言部分,手册详细介绍了RC28-14控制器所支持的编程语言,如C++、Java等。它提供了一套丰富的API函数库,使开发人员能够方便地进行编程。 接着,手册还介绍了RC28-14控制器的程序结构。它包括主程序、子程序、函数、循环结构、条件语句等。通过学习手册中的示例代码,读者可以了解如何编写有效的控制程序。 最后,在常见问题部分,手册列举了一些常见的问题和解决方法。例如,如何调试程序、如何处理异常情况等。这些问题和解决方法对于使用RC28-14控制器的工程师和技术人员非常有用。 总的来说,《RC28-14控制器编程手册》是一本详细而全面的手册,它提供了对RC28-14控制器编程的全面指导。读者可以通过学习该手册,掌握RC28-14控制器的编程技能,从而更好地应用于实际工程中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值