首页 > 其他分享 >学习笔记7

学习笔记7

时间:2023-10-28 23:55:41浏览次数:41  
标签:共享资源 同步 创建 笔记 学习 互斥 线程 pthread

第7章 并发编程

线程

线程创建和终止:

可以使用pthread库中的函数来创建和终止线程。线程可以通过系统调用函数fork()在父进程中创建,也可以通过创建新的进程来创建线程。

线程调度:

Linux操作系统会根据一定的算法对线程进行调度,以实现并发执行。线程调度通常包括时间片轮转、优先级调度等机制。

线程同步:

线程同步是指多个线程之间的数据共享和通信机制。Linux提供了多种同步机制,如互斥锁、条件变量、屏障等,以实现线程间的协作和同步。

线程池:

线程池是一种使用多个线程来处理请求的并发模型。线程池通过预创建一定数量的线程来处理请求,避免频繁创建和销毁线程所带来的开销。

多线程编程注意事项:

在多线程编程中,需要注意线程安全性、数据同步、死锁等问题。为了避免这些问题,可以使用合适的同步机制来保证数据一致性和安全性。

线程管理函数

Linux中的线程管理函数主要包括以下几种:

pthread_create():

用于创建一个新的线程。需要指定线程的属性(包括优先级、是否需要栈等)、线程函数和传递给线程函数的参数。

pthread_join():

用于等待一个线程结束并获取其返回值。

pthread_detach():

用于在程序结束时,把不再需要的线程单独放置在就绪队列中。这可以提高程序的运行效率。

phread_self():

返回当前线程的标识符。

pthread_exit():

用于结束当前线程的执行,并返回一个值给调用者。

pthread_mutex_init() 和 pthread_mutex_destroy():

这两个函数用于初始化一个互斥锁并释放锁资源。

pthread_mutex_lock() 和 pthread_mutex_unlock():

用于对互斥锁进行加锁和解锁操作。

线程同步

互斥锁(Mutex):

互斥锁是最基本的线程同步机制。它通过给共享资源加锁的方式,在任意时刻只允许一个线程访问该资源,其他线程则需要等待锁的释放。当线程完成对共享资源的操作后,会将锁释放供其他线程使用。

条件变量(Condition Variable):

条件变量用于在多个线程之间实现复杂的线程同步和通信。它通常与互斥锁配合使用。线程可以在条件变量上等待某个条件满足,当条件满足时,其他线程可以通过条件变量发送信号,唤醒等待的线程继续执行。

读写锁(Read-Write Lock):

读写锁用于在多线程环境下对共享资源进行读操作和写操作的同步。多个线程可以同时对共享资源进行读操作,但只有一个线程能够进行写操作,并且写操作时其他线程无法进行读或者写操作。

信号量(Semaphore):

信号量是一种更加复杂的线程同步机制,它可以用来限制同时访问某个共享资源的线程数量。当信号量的计数器为正时,线程可以继续执行,当计数器减为0时,线程需要等待。

苏格拉底挑战
image

image
image
image

标签:共享资源,同步,创建,笔记,学习,互斥,线程,pthread
From: https://www.cnblogs.com/1104dd/p/17795341.html

相关文章

  • 《信息安全系统设计与实现》学习笔记7
    第四章并发编程并行计算要求解某个问题,先要设计一种算法,描述如何一步步地解决问题,然后用计算机程序以串行指令流的形式实现该算法。在只有一个CPU的情况下,每次只能按顺序执行某算法的一个指令和步骤。但是,基于分治原则(如二又树查找和快速排序等)的算法经常表现出高度的并行性......
  • 学习笔记7
    第4章并发编程一、知识点归纳并行计算导论顺序算法与并行算法begin-endcobegin-end并行性与并发性线程原理优点线程创建和切换速度更快线程的响应速度更快线程更适合并行计算缺点线程需要来自用户的明确同步许多库函数可能对线程不安全在单CPU......
  • React学习一:环境搭建、JSX基础、事件绑定、组件使用、样式控制
    一、概念React由Meta公司研发,是一个用于构建Web和原生交互界面的库。react中文文档地址:https://zh-hans.react.dev/learnReact的优势相较传统基于DOM开发的优势:组件化的开发方式;不错的性能相较于其他前端框架的优势:丰富的生态;跨平台支持二、环境搭建首先和vue项目一样,项目......
  • 运用递归学习新知识——插入排序
    还是老样子,先讲一下插入排序的一个概念,比如校合唱团要按身高排队,从左到右由矮到高,小糖同学左边的同学已经按照身高站好了,右边还很乱,于是团长小蓝姐姐想了一个办法,她叫小糖同学往左看,小糖同学左边第一位叫男低1号,左边第二位叫男低2号,右边第一位叫男高1号,右边第二位叫男高2号,以此类......
  • 第八周学习记录
    第四章文件权限4.2基本权限4.2.1ACL的基本用法getfacl命令查看ACL权限,如下图所示: setfacl命令可以设置ACL权限,对每一个文件或目录进行更精确的权限设置,添加“-m”参数可以修改当前文件ACL权限,如下图所示:为用户tom,增加“rwx”权限,使用getfacl命令查看,如下图所示: ......
  • 学习笔记7+代码
    一、苏格拉底挑战二、遇见的问题三、实践和代码代码:#include<stdio.h>#include<pthread.h>//线程函数,接受一个void*参数,返回一个void*指针void*thread_function(void*arg){intthread_arg=*((int*)arg);printf("Threadreceivedargument......
  • Python第二章读书笔记-2023.10.28
    03运行超市抹零结账行为money_all=67.99+11.75+21.1+8.49+25.89+17.5+22.4money_all_str=str(money_all)print("商品总金额为:",money_all_str)money_real=int(money_all)money_real_str=str(money_real)print("实收金额为:",money_real_str)print("学号后四位3126"......
  • 【学习笔记】卡特兰数
    卡特兰数定义:卡特兰数的计算公式涉及组合计数,它是很多组合问题的数学模型,是一个很常见的数列。\(\bf{\underline{卡特兰数(Catalan)}}\)是一个数列,它的一种定义是:\[C_n=\frac{1}{n+1}\binom{2n}{n},n=0,1,2,...\]卡特兰数有三个计算公式:公式1:\[C_n=\frac{1}{n+1}\binom{2n}......
  • 学习笔记7
    第四章并发编程这一章主要介绍了并发编程的相关内容,包括并行计算、顺序算法与并行算法以及并行性和并发性;解释了线程的原理机器相对于进程的优势,同时还进行了线程管理、并发编程的实际操作,让我们更加深刻地了解多任务处理、线程同步和并发编程的原理及方法。并行计算基于分治......
  • 第九周Linux学习笔记
    本周的学习内容属实有点多(差点跟不上,浅浅吐槽一下),学习了第五章进程管理以及第六章I/O重定向。具体命令及其作用在下面一一列举。第五章:进程管理进程小tips:每个进程都有唯一的进程表示PID;进程有就绪态、阻塞态和运行态三个状态;进程有的是密集型有的是疏散型。1、“psaux”命令,......