源内容(英文)
线程是进程内部的一个单一指令流。因为线程拥有进程的某些属性,它们有时被称为轻量级进程。但与进程不同的是,线程之间并不是完全独立的。它们与其他线程共享代码段、数据段以及操作系统资源(如打开的文件和信号)。但是,像进程一样,线程拥有自己的程序计数器(PC)、寄存器组和栈空间。
多线程 是一种编程技术,它将一个进程划分为多个更小的单元,称为 线程,这些单元可以同时运行。多线程通常用于 Web 服务器、游戏和实时系统等应用程序中,以处理用户输入、后台处理和其他 I/O 操作等同时发生的任务。
在 C 语言中,我们使用 POSIX 线程(pthreads)库来实现多线程,它提供了不同的组件以及线程管理函数,共同构成了 C 语言多线程程序的基础。
pthread 库定义在 头文件中。通常,我们不需要显式地告诉链接器我们正在使用这个库,但如果程序显示错误,则使用以下标志进行编译:
C
CODEBLOCK_297e6799
让我们看看如何在我们的 C 程序中执行多线程操作。
创建线程
第一步是创建一个线程并给它分配一个任务。要创建一个新线程,我们使用 C 语言线程库提供的 pthread_create() 函数。它会初始化并启动该线程以运行给定的函数(该函数指定了它的任务)。
语法
C
CODEBLOCK_c79270e8
其中,
- thread : 指向 pthread_t 变量的指针,系统在该变量中存储新线程的 ID。
- attr : 指向线程属性对象的指针,该对象定义了线程的属性。传入 NULL 表示使用默认属性。
- routine: 指向线程将要执行的函数的指针。该函数必须返回 void 并接受一个 void 参数。
- arg: 传递给线程函数的单个参数。如果不需要参数,则使用 NULL。你可以通过传递一个结构体或指针来传递多个值。
示例
C
CODEBLOCK_142c9577
输出
Created a new thread
在上面的程序中,有可能 主 线程在创建的线程 thread1 执行完毕之前就结束了,这可能会导致程序出现意外行为。因此,C 语言中提供了一种等待特定线程执行完毕的功能。
等待线程结束
pthread_join() 函数允许一个线程等待另一个线程的终止。它用于同步线程的执行。
示例
C
CODEBLOCK_e13d955e
输出
Thread is running
显式终止线程
pthreadexit() 函数允许线程显式地终止其执行。当线程需要终止其执行并可选择向等待它的线程返回一个值时,会调用 pthreadexit()。
示例
C
CODEBLOCK_b970bec9
输出
Thread is running.
请求取消线程
<a href="https://www.geeksforgeeks.org/c/pthreadcancel-c-example/">pthreadcancel()函数用于请求取消一个线程。它会向目标线程发送一个取消请求,但实际的终止取决于该线程是否处于可取消状态以及它如何处理取消请求。
示例
C
“
#includ