программа для печати нечетных чисел и четных чисел на отдельных потоках

Я изучаю программирование с помощью pthreads. Как я могу записать программу для печати нечетных чисел и четных чисел на отдельных потоках.

5
задан user329013 30 April 2010 в 05:41
поделиться

2 ответа

Передайте значение индикатора, чтобы указать, должен ли поток печатать нечетное или четное число через аргумент функции потока.

В зависимости от того же, начните с 0 (для четных чисел) или 1 (для нечетных чисел) и продолжайте увеличивать на 2 как в потоках, так и в печати.

Вы также можете распечатать идентификатор потока вместе с номером, чтобы указать, какая из ниток что печатает.

Я полагаю, вы знаете, как использовать pthreads.

[Обновление]: ссылка для pthreads Даже при использовании семафоров или мьютексов вам трудно получить вывод в порядке 1,2,3 и т. д., поскольку вы никогда не знаете, какой поток получит возможность выполнить первым. Для этого вам, возможно, придется использовать некоторые расширенные концепции, такие как приоритет потока или межпотоковое взаимодействие с использованием условных переменных. Это всего лишь намеки. Надеюсь, если вы пройдете по ссылке, вы получите больше информации.

1
ответ дан 13 December 2019 в 19:23
поделиться

Вам нужны два объекта синхронизации, такие как семафор или переменная состояния. Идея заключается в том, что поток A запрашивает семафор A до печати и освобождает семафор B после, в то время как поток B делает обратное.

Идея заключается в том, что после того, как поток A запросит семафор A, он сбросит семафор до 0. В следующий раз, когда он запросит семафор A, он будет блокироваться, пока поток B не освободит семафор.

В псевдокоде это выглядит так:

initialization:
    // set semA to 1 so that the call to sem_wait in the
    // even thread will succeed right away
    sem_init(semA, 1)
    sem_init(semB, 0)

even_thread:
   to_print = 0;

   loop:
       sem_wait(semA);

       write(to_print);
       to_print += 2

       sem_post(semB)

odd_thread:
    to_print = 1

    loop:
        sem_wait(semB)

        write(to_print)
        to_print += 2

        sem_post(semA)

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

8
ответ дан 13 December 2019 в 19:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: