我很困惑为什么我的程序没有按预期运行。
我有三个类似的功能:
static void *L1(void *ptr )
{
char *text = (char *)ptr;
int ret;
int fd = open("/dev/L1", O_RDWR);
ret = write(fd, text, strlen(Send)); // Send string to LKM
}
static void *L2(void *ptr )
{
char *text = (char *)ptr;
int ret;
int fd = open("/dev/L2", O_RDWR);
ret = write(fd, text, strlen(Send)); // Send string to LKM
}
static void *L3(void *ptr )
{
char *text = (char *)ptr;
int ret;
int fd = open("/dev/L3", O_RDWR);
ret = write(fd, text, strlen(Send)); // Send string to LKM
}
接下来我有一个创建线程的函数:
static void createKThread(void* (*a)(void *), void* (*b)(void *), void* (*c)(void *))
{
pthread_t t1, t2, t3;
int T1, T2, T3;
T1 = pthread_create(&t1, NULL, a, NULL);
T2 = pthread_create(&t2, NULL, b, NULL);
T3 = pthread_create(&td3, NULL, c, NULL);
pthread_join(t1, NULL);
pthread_join(t2, NULL);
pthread_join(t3, NULL);
}
我主要做的是:
int main(){
Send2[0] = 'a';
createKThread(L1(&Send[0]), L2(&Send[0]), L3(&Send[0])); //First
Send2[0] = 'b';
createKThread(L1(&Send[0]), L2(&Send[0]), L3(&Send[0])); //Second
return 0;
}
我的主程序在第一个函数调用“createKThread”完成后终止。我不明白为什么,我希望第二个函数调用能够工作,并且我想向我的主程序添加更多代码。请告诉我我做错了什么。
最佳答案
你搞乱了你的线程函数。
我假设您的函数 L1
等应该作为线程函数运行。
static void *L1(void *ptr )
{
char *text = (char *)ptr;
int ret;
int fd = open("/dev/L1", O_RDWR);
ret = write(fd, text, strlen(Send)); // Send string to LKM
}
你的编译器不会大喊缺少返回值吗?
当您调用创建函数时,您将传递这些函数的返回值:
createKThread(L1(&Send[0]), L2(&Send[0]), L3(&Send[0])); //First
您无需传递函数的地址,而是调用它们! 当它们返回随机值时,您可以使用随机函数地址创建线程。
关于c - 线程未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47285749/