13、多线程编程中的关键技术与问题解析

多线程编程中的关键技术与问题解析

1. 线程中断的思考

在多线程编程里,中断线程并改变其执行任务是一项颇具挑战的需求。当你有此想法时,需审慎重新考量目标。比如,思考为何要中断特定线程,是否能通过以下方式完成工作:
- 从该线程进行轮询;
- 等待线程完成当前任务后查看队列;
- 直接创建新线程执行手头任务。

通常,会有更简便的方法达成目的,应努力探寻。

2. Win32 I/O 完成端口

Win32 的 I/O 完成端口是解决生产者/消费者问题的方案。其操作流程如下:
1. 创建一个带有文件句柄的完成端口;
2. 让多个线程在该完成端口等待;
3. 当数据包抵达文件句柄时,唤醒一个等待线程并交付数据包处理;
4. 线程处理完成后发送回复,再返回端口继续等待。

这种方式深受 Windows NT 开发者喜爱。

3. 线程间通过流通信

有时会探讨线程间通过流、管道、套接字等更高级通信方式进行通信。不过,多数情况下这么做是为了与现有代码对接。若使用他人定义的接口,可采用此方式;否则,不建议这么做。因为线程间通常想交换的是对象,而非字节。流的工作模式是为线程提供字符,若流中无字符,调用者会阻塞;当其他线程写入字符,等待线程会被唤醒处理。这是一种将队列限制为字节的生产者/消费者模型,效率并非最优。所以,虽可通过流通信,但不推荐。

4. Volatile 关键字

在 C 语言中, volatile 关键字用于告知编译器,相关变量的变化独立于本地代码。因此,编译器不

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值