补充:不确定类型指针 void *
- char *
#include <stdio.h>
void My_Func(void *arg)
{
printf("arg -> %s\n", arg);
}
int main()
{
printf("Anything I do, I spend a lot of time. I do it with passion and intensity. I want to be in charge. \n");
char param[100];
gets(param);
My_Func(param);
return 0;
}
- int *
#include <stdio.h>
void My_Func(void *arg)
{
printf("arg -> %d\n", *(int *)arg); // 2强转
}
int main()
{
printf("Anything I do, I spend a lot of time. I do it with passion and intensity. I want to be in charge. \n");
int param;
scanf("%d", ¶m);
My_Func(¶m); // 1传入地址
return 0;
}
时间:2021年7月17日15:36:25
pthread_create 创建一个新的线程,并让它可执行。下面是关于参数的说明:
SYNOPSIS
#include <pthread.h>
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);
argument1:线程的ID的地址
argument2:设置线程属性的地址
argument3:运行函数的地址
argument4:运行函数的参数的地址
基于线程的C语言多线程
代码如下:
example1.c
#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>//头文件
//线程要运行的函数
//注意函数返回类型,参数类型以及要有return
void* myFunc1(void* arg)
{
printf("Hello World,i am myFunc1\n");
return NULL;
}
int main(){
//声明一个线程
pthread_t th;
//创建一个线程
pthread_create(&th, NULL,myFunc1,NULL);//参数分别是:线程ID,线程属性,运行函数,运行函数参数
//等待线程执行完毕(main函数执行完毕,线程没执行玩也会直接结束,所以要等待线程执行完毕.)
pthread_join(th,NULL);
return 0;
}
example1s.c
#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
void* myFunc(void* arg)
{
printf("Hello World\n");
return NULL;
}
int main(){
//声明一个线程
pthread_t th;
//创建一个线程
pthread_create(&th, NULL,myFunc,NULL);
//等待线程执行完毕
pthread_join(th,NULL);
return 0;
}
运行结果:
Hello World
example2.c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void *myFunc(void *arg)
{
int i;
//需要进行强制类型转换
char *name = (char *)arg;
for (i = 0; i < 100; i++)
{
printf("%s:%d\n", name, i);
}
return NULL;
}
int main()
{
//声明两个线程
pthread_t th1;
pthread_t th2;
//创建两个线程
pthread_create(&th1, NULL, myFunc, "th1");
pthread_create(&th2, NULL, myFunc, "th2");
//等待线程执行完毕
pthread_join(th1, NULL);
pthread_join(th2, NULL);
return 0;
}
运行结果:(不是每次都一样)
th1:0
th1:1
th1:2
th1:3
th1:4
th1:5
th1:6
th1:7
th1:8
th1:9
th1:10
th1:11
th1:12
th1:13
th1:14
th1:15
th1:16
th1:17
th1:18
th1:19
th1:20
th1:21
th1:22
th1:23
th1:24
th1:25
th1:26
th1:27
th1:28
th1:29
th1:30
th1:31
th1:32
th1:33
th1:34
th1:35
th1:36
th1:37
th1:38
th1:39
th1:40
th1:41
th1:42
th1:43
th1:44
th1:45
th1:46
th1:47
th1:48
th1:49
th1:50
th1:51
th1:52
th1:53
th1:54
th1:55
th1:56
th1:57
th1:58
th1:59
th1:60
th1:61
th1:62
th1:63
th1:64
th1:65
th1:66
th1:67
th1:68
th1:69
th1:70
th1:71
th1:72
th1:73
th1:74
th1:75
th1:76
th1:77
th1:78
th1:79
th1:80
th1:81
th1:82
th1:83
th1:84
th1:85
th1:86
th2:0
th2:1
th2:2
th2:3
th2:4
th2:5
th2:6
th2:7
th2:8
th2:9
th2:10
th2:11
th2:12
th2:13
th2:14
th2:15
th2:16
th2:17
th2:18
th2:19
th2:20
th2:21
th2:22
th2:23
th2:24
th2:25
th2:26
th2:27
th2:28
th2:29
th2:30
th2:31
th2:32
th2:33
th2:34
th2:35
th2:36
th2:37
th2:38
th2:39
th2:40
th2:41
th2:42
th2:43
th2:44
th2:45
th2:46
th2:47
th2:48
th2:49
th2:50
th2:51
th2:52
th2:53
th2:54
th2:55
th2:56
th2:57
th2:58
th2:59
th2:60
th2:61
th2:62
th2:63
th2:64
th2:65
th2:66
th2:67
th2:68
th2:69
th2:70
th2:71
th2:72
th2:73
th2:74
th2:75
th2:76
th2:77
th2:78
th2:79
th2:80
th2:81
th2:82
th2:83
th2:84
th2:85
th2:86
th2:87
th2:88
th2:89
th2:90
th2:91
th2:92
th2:93
th2:94
th2:95
th2:96
th2:97
th2:98
th2:99
th1:87
th1:88
th1:89
th1:90
th1:91
th1:92
th1:93
th1:94
th1:95
th1:96
th1:97
th1:98
th1:99
下一节: Day2-C语言多线程1-基于线程