У меня есть многопоточная программа, которую мы изучаем в моем классе системотехники.
Программа выглядит следующим образом.
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
// repeat the times (*) operation 100,000 times to slow down the
// execution of the instructions
#define RPT 100000
void* print_X() {
int i;
float x;
while (1) {
// the multiplication operation below is for consuming some CPU
//time to slow down the execution
for(i=0; i<RPT; i++) {
x = 3.1415926*3.1415926;
}
printf("X");
}
}
void* print_O() {
int i;float x;
while (1) {
// the multiplication operation below is for consuming some CPU
//time to slow down the execution
for(i=0; i<RPT; i++) {
x = 3.1415926*3.1415926;
}
printf("O");
}
}
int main () {
pthread_t tid1, tid2;pthread_create (&tid1, NULL, &print_X, NULL);
pthread_create (&tid2, NULL, &print_O, NULL);
// Wait till threads complete. Not really related to this
// question in this assignment. Can be ignored.pthread_join(tid1, NULL);pthread_join(tid2, NULL);
printf ("\n==========================\n");
}
Таким образом, в основном, эта программа запускается 1000 раз, чтобы замедлить выполнение, и два процесса конкурируют друг с другом, чтобы получить вывод ниже.
(Вывод содержит номера строк и новые строки, чтобы сделать его более читабельным.)
01: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
02: ОООООООООООООО
03: XXXXXXXXXXXXXXXXXXX
04: ООООООООООООООООООО
05: XXXXXXXXXXXXXXXXXX
06: ОООООООООООООООООООООООООООООООО
07: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
08: XXX
09: О
10: X
11: O
12: X
13: O
14: X
15: O
16: XXXXXXXXXXXXXXXXXXXXXXXXX
17: ОООООООООООООООООООООООООООООООООООООООООООООООО * *
18: XXXXXXXXXXXXXXXXXXXXXXX
19: ОООООООООООООООООООООООО
Мой единственный вопрос касается также строк 08-15. Нас спрашивают, каковы могут быть возможные причины этого вывода (в основном, по одному), и я не могу понять, что может произойти, если каждый поток остановится и уступит другому. 7 раз подряд так?
В учебнике рассматриваются такие понятия, как взаимное исключение, тупики и голод, но мой уровень знаний по этому вопросу не может понять, как это могло произойти?
Любая помощь будет высоко ценится.