pthread_create功能
时间: 2023-11-17 08:06:03 浏览: 73
pthread_create()函数是POSIX线程库中的一个函数,用于创建一个新的线程。它接受四个参数:指向线程标识符的指针、线程属性、指向函数的指针和传递给该函数的参数。该函数返回0表示成功,否则返回错误代码。
以下是一个简单的pthread_create()函数的例子:
```c
#include <pthread.h>
#include <stdio.h>
void *myThreadFun(void *vargp)
{
sleep(1);
printf("Printing from Thread \n");
return NULL;
}
int main()
{
pthread_t thread_id;
printf("Before Thread\n");
pthread_create(&thread_id, NULL, myThreadFun, NULL);
pthread_join(thread_id, NULL);
printf("After Thread\n");
exit(0);
}
```
相关问题
线程pthread_create()、pthread_exit()、pthread_join()、pthread_cancel()
这四个函数都是用于多线程编程中的函数,具体功能如下:
1. pthread_create():用于创建一个新的线程,并在新线程中执行指定的函数。它的参数包括指向线程标识符的指针、线程属性、被调用函数的地址和传递给被调用函数的参数。该函数执行成功时返回0,否则返回一个错误码。
2. pthread_exit():用于终止当前线程的执行,并返回一个指向某个对象的指针。如果没有需要返回的对象,可以传递NULL。该函数的参数被视为当前线程的返回值。这个返回值可以被其他线程通过pthread_join()函数获取。
3. pthread_join():用于等待一个线程的结束,并获取该线程的返回值。该函数的参数包括要等待的线程标识符、指向某个对象的指针,该指针将被设置为被等待线程的返回值。如果被等待线程已经结束,pthread_join()将立即返回。
4. pthread_cancel():用于取消一个线程的执行。当该函数被调用时,被取消的线程将收到一个取消请求。如果该线程没有设置取消点,那么它将立即停止执行。否则,它将在到达取消点时停止执行。
分析代码功能#include"ch7.h" void*add(void*arg); long longinti=0; pthread_mutex _t i_mutex; int main(void) { pthread_attr_t threadattr; pthread_attr_init(&threadattr); pthread_t tid_addl,tid_add2,tid_add3,tid_add4,tid_add5; if ((pthread_mutex_init(&i_mutex,NULL))!=0) { fprintf(stderr,"Couldn't initialize mutex\n"); return l; } pthread_create(&tid_addl,&threadattr,add,NULL); pthread_create(&tid_add2,&threadattr,add,NULL); pthread_create(&tid_add3,&threadattr,add,NULL); pthread_create(&tid_add4,&threadattr,add,NULL); pthread_create(&tid_add5,&threadattr,add,NULL); pthread_join(tid_add1,NULL); pthread_join(tid_add2,NULL); pthread_join(tid_add3,NULL); pthread_join(tid_add4,NULL); pthread_join(tid_add5,NULL); printf("Sum is %ld\n",i); if ((pthread_mutex_destroy(&i_mutex))!=0) { fprintf(stderr,"Couldn't initialize mutex\n"); return 1; } }
这段代码是一个多线程程序,主要实现了多个线程同时对一个变量进行加操作,并最终输出加操作后的结果。具体实现方式是:创建了5个线程,每个线程都调用了同一个函数add(),并且传入的参数为NULL。在add()函数中,首先使用pthread_mutex_lock()加锁,然后对全局变量inti进行加1操作,并最后使用pthread_mutex_unlock()解锁。最后,主线程使用pthread_join()等待5个线程的结束,并输出加操作后的结果。同时,还使用pthread_mutex_init()和pthread_mutex_destroy()初始化和销毁了一个互斥锁i_mutex,保证了多个线程对同一个变量的操作的线程安全性。
阅读全文