Linux Magazine的这篇文章解释了在Linux中实现线程的方式与商业Unixs (如Solaris )的不同之处。总之,Linux使用用户线程到内核线程的一对一映射,而Solaris使用多对多映射。本文暗示,这可能会给Solaris带来性能优势,特别是在线程之间切换时。在我花时间测试之前,有人已经做过了吗?
我对所有这些细节以及它们如何在Linux中相互关联感到有点困惑。"Unix内部“一书指出,lightweight process (LWP)是内核支持的用户线程,内核看不到进程内部的线程。对于Linux,这仍然是正确的吗?
据我所知,用户空间线程被安排在进程内部,通过更高层次的抽象作为pthread库,而不需要内核的干预。我说的对吗?
我的程序有段错误。我尝试使用gdb的gdb命令查找bug,但不幸的是,我不理解它的输出:
(gdb) bt
#0 0x00007ffff1678480 in ?? () from /usr/lib/x86_64-linux-gnu/libnvidia-opencl.so.1
#1 0x00007ffff171c11e in ?? () from /usr/lib/x86_64-linux-gnu/libnvidia-opencl.so.1
#2 0x00007ffff17e565f in ?? () from /usr/lib/x86_64-linux-gnu/libnvidia-ope
在无法在中找出我的应用程序中发生了什么之后,我尝试在我的pc上复制它,使用valgrind来查找内存/多线程问题。我在很多地方看到过这样的情况:
==769== Possible data race during write of size 4 at 0xACD3ADC by thread #13
==769== Locks held: none
==769== at 0x4C36067: memset (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==769== by 0x4E4570D: pthread_cre