[英]What is a basic example of "low-level" multi-threading in C++?
我是一个有几年工作经验的新手开发人员。 最近我在一家游戏公司面试,被问到“你做过多线程吗?” 我告诉他们有一个带有几个线程的 C# 应用程序......然后我说了一些关于 Sql 中的事务和锁定等。 面试官礼貌地告诉我,这太高级了,他们正在寻找有 C++ 多线程经验的人。
那么什么是 C++ 中“低级”多线程的基本示例?
他可能指的是您对 C# 的使用,而不是您的线程经验。
如果是游戏公司,那么他们可能想要这样的答案:
“我实现了一个多线程 AI 例程,在可用 CPU 资源中为 NPC 分配决策树计算。正确锁定,尤其是在将代码与应用程序的其余部分集成时,很困难。我们还花了一些时间跟踪每个线程的资源使用情况因此,当 AI 处理威胁到主 UI 响应能力时,我们可以对其进行节流。”
(这些都是我编造的,我个人实际上并没有做过。笑)
这是一个使用 pthread 的快速示例,基于我们的一些测试代码。 它产生两个线程,并等待它们完成。
int main( void )
{
pthread_t reader, writer;
void *arg;
// [... initialisation ...]
// Spawn threads
if( pthread_create( &reader, NULL, reader_func, arg ) ||
pthread_create( &writer, NULL, writer_func, arg ) )
{
perror( "pthread_create" );
return EX_OSERR;
}
// Wait while threads run
pthread_join( reader, &arg );
pthread_join( writer, &arg );
return EX_OK;
}
void *reader_func( void *arg )
{
// [... do some stuff ...]
return NULL;
}
void *writer_func( void *arg )
{
// [... do some different stuff ...]
return NULL;
}
我会看一下http://zthread.sourceforge.net/ ,它是 PThreads 库的优秀包装器。 这是一个非常快速和稳定的库,可以是相当低级的库。 写得很好,有据可查。
老实说,我认为你一直在做的事情和使用 pthreads 之间没有太大区别。 如果您使用线程完成了大量工作,您就会遇到锁定、同步等所有问题,并且可以很容易地直接使用 pthreads 调用。 您可能与此绝缘的稍微棘手的一件事是终止,从线程中获取退出代码等。
(当然,pthreads 并不像您所能获得的那么低;如果您使用的是 linux,请查看 clone() 以了解它在系统调用级别上的实际工作方式。但除非他们真正使用它,否则没有人真正使用它)重新实现 pthread。)
好吧,如果你真的想把这个想法发挥到“最大”,并且你愿意用线程弄脏你的手。 我建议尝试实现用户空间线程库。
查看 uconext.h 及其各种过程(setcontext、swapcontext 和 makecontext)并尝试用它们编写一个简单的协作线程库。 实现锁、条件变量、线程创建/销毁和协作让步。 它不会特别花哨(即没有实际的并行性(因为你需要深入研究克隆系统调用或内核)但如果你能做到,没有人会说你没有低水平经验。
只是为了了解项目的规模。 我用大约 500 行 C++ 编写了这样一个简单的线程库,考虑到其中至少 20% 是注释、断言语句和用于调试的日志记录。
此外, Boost Threads是围绕 pthreads 和 Windows 线程的相当可移植的包装器......据我所知,许多游戏开发商店使用 C++ 并且喜欢一些 Boost 库。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.