Многопоточная программа с двумя потоками в c ++ - PullRequest
0 голосов
/ 04 мая 2018

У меня есть многопоточная программа, которую мы изучаем в моем классе системотехники. Программа выглядит следующим образом.

#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 раз подряд так? В учебнике рассматриваются такие понятия, как взаимное исключение, тупики и голод, но мой уровень знаний по этому вопросу не может понять, как это могло произойти?

Любая помощь будет высоко ценится.

...