gpt4 book ai didi

c - 使用单个语句在 C 中启动后台线程

转载 作者:行者123 更新时间:2023-11-30 14:25:34 25 4
gpt4 key购买 nike

我读过很多关于 Go 语言的文章。我有很多不喜欢它的地方——足以让我不想在日常生活中使用它。然而,我确实喜欢这种语言的一点:goroutines。

我正在考虑用 C 语言实现它的方法。到目前为止,我在互联网上能找到的最好的方法是

#define go if (!fork()) for(;;exit(0))

这样,你就可以在函数调用前加上 go 前缀,这样

go printf("Hello, world!\n");

在不同的线程中运行,以及:

go { printf("Hello, world!\n"); foo(); bar(); baz(); }

但是,fork() 当然有速度问题。 (在我的机器上,fork() 所需的时间是 printf() 的 7 倍,使用 rdtsc x86 指令进行基准测试并运行几次以消除在内核之间切换或被调度的可能性。)

所以,我的问题是,是否有更好的方法来实现这一点,以便速度更快?

最佳答案

Goroutines 主要是线程的一个花哨的词,具有一些用于线程间通信等的额外功能。

我猜您感兴趣的部分是能够在单独的线程中简洁地运行一段代码。不幸的是,在 C 中没有一种简单的方法可以做到这一点 - 您必须编写一个函数来包含您想要在后台运行的代码,并使用接受该函数并执行必要的魔法的宏或函数pthread_create() 或类似的。

除非有人想出一种巧妙的方法来使用宏来动态创建函数?有人吗?

请记住,除了最基本的线程应用程序之外,在所有应用程序中,您都需要某种同步,这将使事情变得不那么简单。

关于c - 使用单个语句在 C 中启动后台线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10183747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com