pthread_create()创建线程:
创建线程(实际上就是确定调用该线程函数的入口点),在线程创建以后,就开始运行相关的线程函数。
int pthread_create(pthread_t *tidp, const pthread_attr_t *attr, (void*)*start_rtn(void*), void *arg);
返回值
返回0表示成功,返回-1表示失败。
参数
第一个参数为指向线程标识符的指针。
第二个参数用来设置线程属性。
第三个参数是线程运行函数的起始地址。
最后一个参数是运行函数的参数。
以上是线程创建的函数,我们看个代码:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <ctype.h>
#include <pthread.h>
#define MAX_THREAD 3 /* 线程的个数 */
unsigned long long main_counter = 0, counter[MAX_THREAD];
/* unsigned long long是比long还长的整数 */
void* thread_worker(void*);
int main(int argc, char* argv[])
{ int i, rtn, ch;
pthread_t pthread_id[MAX_THREAD] = {0}; /* 长整形数组存放线程id*/
for (i=0; i<MAX_THREAD; i++) {
rtn = pthread_create(&pthread_id[i], NULL, thread_worker, &i) ;
}
do {
/* 用户按一次回车执行下面的循环体一次。按q退出 */
unsigned long long sum = 0 ;
/* 求所有线程的counter的和 */
for (i=0; i<MAX_THREAD; i++)
{
/* 求所有counter的和 */
sum += counter[i];

这篇博客深入解析了pthread_create()函数的使用,包括返回值和参数说明,并通过实例展示了线程创建过程中的问题及解决方案,如线程同步和临界资源访问。在实验中,由于线程执行顺序的不确定性导致了main_counter和sum的不一致,通过引入互斥锁解决了这个问题。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



