18|其他重要标准库特性:还有哪些库变更值得关注?
jthread
- 深入了解
- 翻译
- 解释
- 总结
C++20标准库带来了一系列重要变化,包括jthread、source location、Sync stream和u8string。jthread类解决了C++11标准thread类的灵活性和安全性问题,提供了默认行为的安全性,支持线程中断机制。source location标准类提供了更完整的源代码信息,对于程序跟踪调试极为有用。Sync stream解决了多线程场景下输出流对象的同步问题。而u8string引入了新的字符类型char8_t,用于描述UTF-8的字符串,解决了C++11中缺乏对utf-8字符描述方式的问题。这些变更为C++开发者带来了更便利和安全的编程体验。然而,u8string的输出仍然需要通过二进制方式输出到文件,C++标准对语言编码的支持仍有待进一步完善。总的来说,C++20标准库的更新为并发编程、调试和多线程输出等方面带来了更多便利和安全性,但在语言编码支持方面仍有改进空间。
《现代 C++20 实战高手课》,新⼈⾸单¥59
全部留言(1)
- 最新
- 精选
- peter请教老师几个问题: Q1:pthread_create属于thread类吗? 我从网上搜到了一个安卓代码,有C++代码。线程部分,用的是pthread_create、pthread_join、pthread_exit等函数。能正常工作,但不太了解这套东西。这套东西属于C++类库中的thread类吗?还是类似于系统调用一类的API? Q2:stop_requested设置为true,但线程本身不退出,会发生什么? Q3:一个线程发送request_stop成功后,什么时候其他线程才能发送? 文中提到“一个线程发送请求成功后,其他线程调用 request_token 会失败,但不会引发异常”,发送成功后,按道理其他线程就可以发送了啊;不能发送的话,何时才能发送?
作者回复: 1. pthread_create不属于thread类。Pthread是POSIX的Thread标准,是支持POSIX标准的系统提供的线程库,并不属于C++标准的一部分,而是属于实现部分(也就是C++标准库可能在某些支持POSIX标准的系统中使用pthread实现thread类)。 2. stop_requested设置为true,线程本身不退出不会发生什么,stop_requested只是一种线程安全的中止线程的通知手段而已。 3. 一个线程向一个jthread对象发送request_stop成功后其他的线程就不会发送成功了,因为标准中规定的就是有且只有一个线程可以发送request_stop成功,因为发送成功后stop_token就设置成true了,其他的线程再发送也就没啥意义了,你可以把request_token发送成功理解为“成功将jthread的stop_token从false修改成true”,如果stop_token本来就是true了,那肯定就不用修改了,就是发送失败。
2023-03-04归属地:北京