Ich bin ziemlich verwirrt, warum mein Programm nicht wie vorgesehen funktioniert.Thread funktioniert nicht wie vorgesehen
Ich habe drei ähnliche Funktion:
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
}
Next Ich habe eine Funktion Thread für die Erstellung von:
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);
}
In meinem Haupt ich tue:
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;
}
Mein Hauptprogramm endet nach Abschluss des ersten Funktionsaufrufs `createKThread'. Ich kann nicht herausfinden warum, ich möchte, dass der zweite Funktionsaufruf funktioniert und ich möchte mehr Code zu meinem Hauptprogramm hinzufügen. Bitte rate mir, was ich falsch mache.
Weil es segfaults ... Sie müssen einen Funktionszeiger 'L1' übergeben, nicht den Rückgabewert des Aufrufs' L1 (& Send [0]); ' – Ctx
Die Tatsache, dass Sie nicht einmal' int main verwenden 'schlägt vor, dass Sie nicht mit ** Warnungen aktiviert ** oder aufmerksam machen. –
Obwohl, leider, GCC ist dumm genug, nicht zu diagnostizieren 'void *' nicht kompatibel mit Funktionszeiger ohne '-pedantic'. Yay POSIX:/ –