Запись и чтение из буфера с помощью pthread - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь использовать pthread.В моем коде ниже я определил две глобальные переменные (arg1 и arg2), а в основной функции я начинаю заполнять каждый элемент arg2 с 1. Я хочу, чтобы pthread напечатал 101-й элемент arg2, как только он будет заполненглавный.Но pthread ничего не печатает.На самом деле за изменениями arg1 не следует pthread, и pthread предполагает, что arg1 равен 0. Как я могу активировать pthread, чтобы при записи в буфер main, pthread начинал чтение из буфера одновременно?

Заранее спасибо.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <unistd.h>
#include <math.h>
#include <sys/time.h>
#include <unistd.h>
#include <assert.h>
#include <signal.h>
#include <pthread.h>


struct arg_struct {
    int arg1;
    int arg2[1000];
};

//volatile int arg1;

//int arg2[1000];

void *ProcessThread (void *arguments){
    struct arg_struct *args = arguments;

    if( args -> arg1==100) {
        printf("%d",  args -> arg2[ args -> arg1]);
    }
    pthread_exit(NULL);
    return NULL;
}

void main(){
    struct arg_struct args;

    pthread_t thread1;
    void *thread_status;
    pthread_create(&thread1, NULL, ProcessThread, (void *)&args);

    for ( args.arg1=0; args.arg1<1000; args.arg1++){
        args.arg2[args.arg1] =1;
    }
    pthread_join(thread1,&thread_status);
}

1 Ответ

0 голосов
/ 25 сентября 2018

Поток завершается к тому времени, когда вы попадаете в цикл for.arg1 по-прежнему не инициализируется в ProcessThread.Вы можете использовать цикл while с функцией сна, чтобы периодически проверять состояние.

...