【发布时间】:2021-03-22 08:01:45
【问题描述】:
我认为这个问题是不言自明的,但是这里是我所指的一个例子。说我们有
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 新手,我需要完成这个程序,我遇到了这个问题,因为我担心线程会充当一个或类似的方式。导致冲突和错误。但是,由于这是线程安全的(至少在大多数情况下听起来是这样),我只需要找出一种更改变量的好方法,以便我可以操纵我需要的线程。
-
感谢大家抽出宝贵时间回答我的问题,但是问题仍然存在,有什么我应该记住和注意的吗?以及我的第二个问题,因为这是 C 中的标准做法,我应该记下这个问题吗?
-
@itsMe:至少可以说,正确的线程编程并非易事。您的问题的答案是肯定的,可以将相同的函数传递给并行执行的不同线程,但问题在于您如何处理从这些线程访问共享数据的细节。这样的讨论远远超出了评论或答案中可以解释的内容。如果没有任何关于执行什么数据操作的信息,甚至无法给出关于如何或什至做什么的线索。
标签: c multithreading mutex