Qt 文档说的 reentrant 是什么意思?

BillLeecn 2010-08-30 04:53:57
比如 QUdpSocket 中所有函数都是 reentrant, 那么是不是我可以几个线程同时调用 writeDatagram, 或者在 readDatagram 时同时调用 writeDatagram ?
要是我几个线程同时调用 bind 呢?
...全文
299 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tzcherish 2010-09-03
  • 打赏
  • 举报
回复
bigpool 2010-09-03
  • 打赏
  • 举报
回复
在Qt文档中,术语“可重入”与“线程安全”被用来说明一个函数如何用于多线程程序。假如一个类的任何函数在此类的多个不同的实例上,可以被多个线程同时调用,那么这个类被称为是“可重入”的。假如不同的线程作用在同一个实例上仍可以正常工作,那么称之为“线程安全”的。
大多数c++类天生就是可重入的,因为它们典型地仅仅引用成员数据。任何线程可以在类的一个实例上调用这样的成员函数,只要没有别的线程在同一个实例上调用这个成员函数。
gaowenboms 2010-09-01
  • 打赏
  • 举报
回复
当函数可以同时被不同的线程安全地调用时,就称其为"线程安全的"/
而如果类的不同实例可同时用于不同的线程,那么这个类就是可重入的.
BillLeecn 2010-08-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dext 的回复:]

reentrant 被翻译成 可重入,Qt 中大部分类是是 reentrant

也就是说,你创建若干个这样的实例,各线程中各自调用,是没有问题的。

如果要共享调用,就需要锁机制。
[/Quote]
谢谢
学习了
巴依老爷 2010-08-31
  • 打赏
  • 举报
回复
A thread-safe function can be called simultaneously from multiple threads, even when the invocations use shared data, because all references to the shared data are serialized.
A reentrant function can also be called simultaneously from multiple threads, but only if each invocation uses its own data.
dext 2010-08-30
  • 打赏
  • 举报
回复
reentrant 被翻译成 可重入,Qt 中大部分类是是 reentrant

也就是说,你创建若干个这样的实例,各线程中各自调用,是没有问题的。

如果要共享调用,就需要锁机制。
编译qtcreator源码,在make过程中报错(我这里是qtcreator4.4.1,其他版本也会有同样的错误,解决方法相同) g++ -c -pipe -fPIC -fpermissive -finline-functions -Wno-long-long -O2 -std=gnu++1y -fvisibility=hidden -fvisibility-inlines-hidden -Wall -W -D_REENTRANT -fPIC -DQTCSSH_LIBRARY -D'RELATIVE_PLUGIN_PATH="../lib/qtcreator/plugins"' -D'RELATIVE_LIBEXEC_PATH="../libexec/qtcreator"' -D'RELATIVE_DATA_PATH="../share/qtcreator"' -D'RELATIVE_DOC_PATH="../share/doc/qtcreator"' -DIDE_LIBRARY_BASENAME=\"lib\" -DQT_CREATOR -DQT_NO_CAST_TO_ASCII -DQT_RESTRICTED_CAST_FROM_ASCII -DQT_DISABLE_DEPRECATED_BEFORE=0x050600 -DQT_USE_FAST_OPERATOR_PLUS -DQT_USE_FAST_CONCATENATION -DBOTAN_DLL= -DBOTAN_TARGET_OS_HAS_GETTIMEOFDAY -DBOTAN_HAS_ALLOC_MMAP -DBOTAN_HAS_ENTROPY_SRC_DEV_RANDOM -DBOTAN_HAS_ENTROPY_SRC_EGD -DBOTAN_HAS_ENTROPY_SRC_FTW -DBOTAN_HAS_ENTROPY_SRC_UNIX -DBOTAN_HAS_MUTEX_PTHREAD -DBOTAN_HAS_PIPE_UNIXFD_IO -DBOTAN_TARGET_OS_IS_LINUX -DBOTAN_TARGET_OS_HAS_CLOCK_GETTIME -DBOTAN_TARGET_OS_HAS_DLOPEN -DBOTAN_TARGET_OS_HAS_GMTIME_R -DBOTAN_TARGET_OS_HAS_POSIX_MLOCK -DBOTAN_HAS_DYNAMICALLY_LOADED_ENGINE -DBOTAN_HAS_DYNAMIC_LOADER -DBOTAN_BUILD_COMPILER_IS_GCC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -DQT_CORE_LIB -I../../../src -I../../../src -I../../libs -I/opt/qt-creator-opensource-src-4.4.1/tools -I../../plugins -I../3rdparty -I/opt/arm-qt/include -I/opt/arm-qt/include/QtWidgets -I/opt/arm-qt/include/QtGui -I/opt/arm-qt/include/QtNetwork -I/opt/arm-qt/include/QtConcurrent -I/opt/arm-qt/include/QtCore -I.moc/release-shared -I.uic -I/opt/arm-qt/mkspecs/linux-g++ -o .obj/release-shared/botan.o ../3rdparty/botan/botan.cpp ../3rdparty/botan/botan.cpp:46226:21: fatal error: cpuid.h: No such file or directory compilation terminated. Makefile:5559: recipe for target '.obj/release-shared/botan.o' failed make[3]: *** [.obj/release-shared/botan.o] Error 1 make[3]: Leaving directory '/opt/qt-creator-opensource-src-4.4.1/src/libs/ssh' Makefile:314: recipe for target 'sub-ssh-make_fir

16,817

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧