xiv 目录
17.2.4 等待线程结束 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
等待线程结束示例代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
17.2.5 线程退出 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
线程退出示例代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
17.3 互斥锁 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
17.3.1 互斥锁控制块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
17.3.2 互斥锁初始化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
17.3.3 销毁互斥锁 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
17.3.4 阻塞方式对互斥锁上锁 . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
17.3.5 非阻塞方式对互斥锁上锁 . . . . . . . . . . . . . . . . . . . . . . . . . . 337
17.3.6 互斥锁解锁 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
17.3.7 互斥锁示例代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
17.4 条件变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
17.4.1 条件变量控制块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
17.4.2 初始化条件变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
17.4.3 销毁条件变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
17.4.4 阻塞方式获取条件变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
17.4.5 指定阻塞时间获取条件变量 . . . . . . . . . . . . . . . . . . . . . . . . . 342
17.4.6 发送满足条件信号量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
17.4.7 广播 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
17.4.8 条件变量示例代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
17.5 读写锁 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
17.5.1 读写锁控制块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
17.5.2 读写锁初始化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
17.5.3 销毁读写锁 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
17.5.4 读写锁读锁定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
阻塞方式对读写锁读锁定 . . . . . . . . . . . . . . . . . . . . . . . . . . 347
非阻塞方式对读写锁读锁定 . . . . . . . . . . . . . . . . . . . . . . . . . 348
指定阻塞时间对读写锁读锁定 . . . . . . . . . . . . . . . . . . . . . . . 348
17.5.5 读写锁写锁定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
阻塞方式对读写锁写锁定 . . . . . . . . . . . . . . . . . . . . . . . . . . 349
非阻塞方式写锁定读写锁 . . . . . . . . . . . . . . . . . . . . . . . . . . 349
指定阻塞时长写锁定读写锁 . . . . . . . . . . . . . . . . . . . . . . . . . 349
17.5.6 读写锁解锁 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
17.5.7 读写锁示例代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
17.6 屏障 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
17.6.1 屏障控制块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
17.6.2 创建屏障 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
17.6.3 销毁屏障 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
17.6.4 等待屏障 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
17.6.5 屏障示例代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
17.7 信号量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
17.7.1 信号量控制块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
17.7.2 无名信号量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
无名信号量初始化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357