Articles of pthreads

Est-il possible d’appeler pthread_exit depuis main?

Lorsque j’appelle pthread_exit depuis main , le programme ne se termine jamais. Je m’attendais à ce que le programme se termine car je sortais du seul fil du programme, mais cela ne fonctionne pas. Il semble pendu. #include #include #include int main(int argc, char *argv[]) { printf(“-one-\n”); pthread_exit(NULL); printf(“-two-\n”); } Process Explorer indique que le […]

Est-ce que pthread_cond_wait (& cond_t, & mutex); déverrouiller puis verrouiller le mutex?

J’utilise pthread_cond_wait(&cond_t, &mutex); dans mon programme et je me demande pourquoi cette fonction nécessite comme second paramètre une variable mutex. Est-ce que pthread_cond_wait() déverrouille le mutex au début (exécution de pthread_cond_wait() ) puis est verrouillé à la fin (juste avant de quitter pthread_cond_wait() )?

Pthread_join non bloquant

Je suis en train de coder l’arrêt d’un serveur multithread. Si tout se passe comme il se doit, tous les threads doivent sortir par leurs propres moyens, mais il y a une petite chance qu’un thread se coince. Dans ce cas, il serait pratique d’avoir une jointure non bloquante pour que je puisse faire. Existe-t-il […]

Le thread de réveil est bloqué lors de l’appel accept ()

Question sur les sockets sur Linux J’ai un thread de travail qui est bloqué lors d’un appel accept (). Il attend simplement une connexion réseau entrante, la gère, puis revient à l’écoute de la connexion suivante. Quand il est temps pour le programme de quitter, comment puis-je signaler à ce thread de travail réseau (depuis […]

Pourquoi ai-je la faute de segmentation ici?

J’ai le code suivant, où j’essaye d’écrire quelque chose dans la stack. J’écris au bas de la stack, ce que l’application n’a toujours pas touché (notez que la stack croît vers le bas et que stackaddr pointe vers le bas). Cependant, je reçois une erreur de segmentation même après avoir utilisé mprotect pour donner à […]

C: Comment passer en sécurité et correctement plusieurs arguments à un pthread?

Considérons ce code simple: void* threadFunction(void* arg) { int argument=(int)arg; printf(“%d recieved\n”, argument); return NULL; } int main(int argv, char* argc[]) { int error; int i=0; pthread_t thread; int argument_to_thread=0; if ((error=pthread_create(&thread, NULL, threadFunction, (void*)argument_to_thread))!=0) { printf(“Can’t create thread: [%s]\n”, strerror(error)); return 1; } pthread_join(thread, NULL); return 0; } Cela fonctionne, mais deux choses me […]

pthreads récupération de locking

Je travaille sur une application de serveur de réseau multithread. En ce moment, j’ai des problèmes avec la récupération de verrou. Si un thread meurt de manière inattendue alors qu’il détient un verrou, par exemple un mutex, un rwlock, un spinlock, etc., est-il possible de récupérer le verrou d’un autre thread sans avoir à entrer […]

macos – le thread de macOS PTHREAD_CANCEL_ASYNCHRONOUS ne fonctionne pas

J’utilise le code suivant: #include #include #include pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; void clean(void *arg) { printf(“thread clean: %ld\n”, (unsigned long)arg); } void* thread_template(void *arg) { pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); pthread_cleanup_push(clean, (void*)pthread_self()); printf(“thread: %ld\n”, (unsigned long)pthread_self()); while ( 1 ) {} pthread_cleanup_pop(0); pthread_exit((void*)0); } int main(int argc, char const *argv[]) { pthread_t tid; pthread_create(&tid, NULL, thread_template, […]

Création de threads qui copient les arguments qui leur sont transmis

J’utilise actuellement boost :: thread, car il me permet très facilement de transmettre un nombre arbitraire d’arguments au thread et de les copier en cours de route. Je n’ai donc pas à craindre qu’ils soient supprimés avant le lancement du thread. Existe-t-il une autre bibliothèque permettant cela, ou un moyen de la simuler à l’aide […]

pthreads et traitement du signal C se terminant tôt

Ce programme est censé Le parent attend simplement indéfiniment le retour de l’enfant (indice, waitpid). b. L’enfant configure deux gestionnaires de signaux (indice, signal) et s’endort pendant 5 minutes. je. Le premier gestionnaire de signal écoute le signal USR1 et, à la réception de celui-ci: 1. Crée un thread (indice, pthread_create). une. Fondamentalement, tout ce […]