Wenn die Signale, die ich maskieren und demaskieren möchte, allen Threads gemeinsam sind, kann ich eine globale Variable für das Signal in POSIX C verwenden, um sie an pthread_sigmask zu übergeben, oder sollte es für jeden Thread unterschiedliche Sigsets geben?Benötige ich ein anderes Sigset für jeden C-POSIX-Thread, um beim Maskieren von Signalen Atomität sicherzustellen?
2
A
Antwort
3
Das zweite Argument von pthread_sigmask()
konstant ist (const sigset_t *set
) [was bedeutet, dass der Speicher durch set
hingewiesen werden nicht geändert], so dass Sie eine einzelne erklären kann [möglicherweise global, um Ihre Meinung] Variable, ohne die Notwendigkeit, jede der Umsetzung Thread-Locking-Mechanismus während des Zugriffs auf es, wie es nicht geändert wird. Alle Threads lesen immer denselben [konsistenten] Wert aus.
Sie können so etwas wie erklären:
/* Global scope */
sigset_t g_set;
Und es pthread_sigmask()
passieren:
/* Assuming `g_set` is already properly set at this point and won't be modified in the future */
pthread_sigmask(how, &g_set, NULL);
Danke für die Antwort. Ich habe vergessen, die Parameter von pthread_sigmask nachzuschlagen und zu sehen, welche nicht konstant sind. Wie auch immer, nochmals vielen Dank für die Erinnerung. – falhumai
@falhumai du bist willkommen :) – pah