我的问题是与C中的线程编程有关。 我的问题是我只是想在我的主程序中创建两个线程。这两个线程应该顺序工作,这意味着我的第一个线程应该首先执行(不应该执行任何线程的其他语句)。第一个线程应该完全控制。在第一个线程完成之前,不应该执行任何其他线程的其他语句,甚至是主程序语句。C语言和多线程编程
完成第一个线程后,应该以与第一个线程类似的方式执行第二个线程。
之后,我的主要执行。
我知道你可以说为什么我要这样做,因为这个事情可以通过创建两个函数并按顺序调用它来实现,但为了学习和实验,我希望在线程。
我写一些C代码如下:
void* fun()
{
printf("\nThe thread 1 is running");
}
void* van()
{
printf("\nthread 2 is running ");
}
int main()
{
pthread_t t1,t2;
pthread_create(&t1,NULL,fun,NULL);
pthread_create(&t2,NULL,van,NULL);
printf("\nI'm in main\n");
pthread_join(t2,NULL);
}
程序的工作完美,但我不理解的功能pthread_join()
的工作。
当我改变我的代码有点如下:
int main()
{
pthread_t t1,t2;
pthread_create(&t1,NULL,fun,NULL);
pthread_join(t2,NULL); // Change
pthread_create(&t2,NULL,van,NULL);
printf("\nI'm in main\n");
}
现在,当我运行的代码它显示了一个分段错误。
现在我的问题有以下几点:
- 中有什么
pthread_create()
功能的属性参数?我们为什么要使用它们?线程的默认属性是什么?请用一个例子来解释。 pthread_create()
函数中的参数是什么?我们为什么使用它们?线程的默认参数是什么?请用一个例子来解释。pthread_join()
如何实际工作?当我的代码主要使用pthread_join()
作为第一个参数t2
时,这意味着什么。这是否意味着main应该暂停执行,直到t2执行完成或其他什么东西?pthread_join()
中的第二个参数是什么?我们为什么用它?它的默认值是多少?请用一个例子或代码来解释。
你的线程函数应该返回一个值,即使它只是零,以便它们返回一个空的void指针。在“工作”代码中,按照您的意图进行排序纯粹是巧合。两个线程函数并发执行; 'main()'不会等待线程1在启动线程2之前完成。如果等待线程1完成('pthread_join(&t1,NULL);'在其'pthread_create()'后面,那么会最小化并发执行重复执行线程2.然后你可以在'main()'本身运行'printf()',因为你已经等待每个线程完成了,你就完成了。 – 2011-06-03 05:49:37