gpt4 book ai didi

c - 是否可以使用相同的静态void函数在c中使用多个线程?

转载 作者:行者123 更新时间:2023-12-03 12:51:05 26 4
gpt4 key购买 nike

我认为这个问题是不言自明的,但是这里是我所指的一个例子。说我们有

static void *foo(void * bar) {

//some random function/method/calculation/data manipulation.

}
创建多个线程并使用相同的功能是否安全/可行?我有一个很长的文件(接近1000行),它开始变得冗长,无法上下滚动。长话短说,我负担不起错误或意外的功能。还是我最好的选择是简单地创建另一个C文件?我的静音,一切都很好。所以我不太担心
int main() {
Is something like this feasable?:

pthread_t A1, A2;
pthread_creat(&A1, NULL, foo, &foobar);
pthread_create(&A2, NULL, foo, &foobar);

pthread_join(A1, NULL);
pthread_join(A2, NULL);
}
如果我选择进入这条路线的任何建议/注意事项?

最佳答案

代码在C中是恒定的,因此多个线程使用相同的功能没有问题。重要的是这些功能对数据的使用:对共享可修改数据的任何访问都必须受到保护。
请注意,某些函数(例如strtok())将其上下文存储在隐藏的静态数据中,因此可能不是线程安全的。
在您的示例中,您传递了相同的foobar对象的地址。除非该对象在两个线程的整个生命周期中都保持不变,否则将存在对共享可修改数据的并发访问,这将需要使用锁或其他形式的同步进行特殊处理。
几千行不是很多数据,单个线程是很多解决问题的更简单方法。除非处理这些数据需要占用大量CPU资源,否则多个线程将带来更多问题,而带来的好处很小。
至少可以说,适当的线程编程并非易事。问题的答案是肯定的,可以将相同的函数传递给并行执行的不同线程,但是问题的关键在于如何处理从这些线程访问共享数据。这样的讨论远远超出了答案中可以解释的范围。没有关于执行什么数据操作的任何信息,甚至无法给出关于如何执行或什至做什么的任何线索。

关于c - 是否可以使用相同的静态void函数在c中使用多个线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66742201/

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