Я пытаюсь решить проблему с писателем и читателем. Я пытаюсь использовать функции семафора Windows.Синхронизация потоков Windows с созданием семафора
Это очень просто, как следует
char n[200];
volatile HANDLE hSem=NULL; // handle to semaphore
Функция записи для консоли. Какой выпуск семафора для процесса чтения.
void * write_message_function (void *ptr)
{
/* do the work */
while(1){
printf("Enter a string");
scanf("%s",n);
ReleaseSemaphore(hSem,1,NULL); // unblock all the threads
}
pthread_exit(0); /* exit */
}
Сообщение для печати дождитесь освобождения от сообщения для печати сообщения.
void * print_message_function (void *ptr)
{
while(1){
WaitForSingleObject(hSem,INFINITE);
printf("The string entered is :");
printf("==== %s\n",n);
}
pthread_exit(0); /* exit */
}
Основная функция запуска приложения.
int main(int argc, char *argv[])
{
hSem=CreateSemaphore(NULL,0,1,NULL);
pthread_t thread1, thread2; /* thread variables */
/* create threads 1 and 2 */
pthread_create (&thread1, NULL, print_message_function, NULL);
pthread_create (&thread2, NULL, write_message_function, NULL);
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
/* exit */
CloseHandle(hSem);
}
Программа выполняет, но не отображает консоль ввода строк.