是否允许使用相同的static void函数在c中使用多个线程?

Is it allowed to use the same static void function to use multiple threads in c?

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

static void *foo(void * bar) {

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

}

是否safe/possible创建多个线程并使用相同的函数?我有一个非常长的文件(接近 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);
}

如果我选择进入这条路线 advice/precautions?

代码在C中是常量,所以多个线程使用相同的函数是没有问题的。重要的是这些功能对数据的使用:必须保护对共享可修改数据的任何访问。

请注意,某些函数(例如 strtok() 将其上下文存储在隐藏的静态数据中,因此可能不是线程安全的。

在您的示例中,您传递了同一个 foobar 对象的地址。除非此对象在两个线程的整个生命周期内都是不变的,否则将同时访问共享的可修改数据,这将需要使用锁或其他形式的同步进行特殊处理。

几千行不是很多数据,单线程是解决问题的更简单的方法。除非此数据的处理非常 CPU 密集,否则多线程会产生更多问题,但收益不大。

正确的线程编程至少可以说是非常重要的。你的问题的答案是肯定的,可以将相同的函数传递给并行执行的不同线程,但问题在于你如何处理从这些线程访问共享数据的细节。这样的讨论远远超出了答案所能解释的范围。如果没有关于执行何种数据操作的任何信息,甚至无法给出关于如何操作甚至做什么的线索。