学习笔记7

发布时间 2023-10-28 23:46:33作者: 窦豆

第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