gpt4 book ai didi

c - 线程未按预期工作

转载 作者:行者123 更新时间:2023-11-30 19:32:16 25 4
gpt4 key购买 nike

我很困惑为什么我的程序没有按预期运行。

我有三个类似的功能:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com