Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2010, 22:20   #1
alenka_ej
 
Регистрация: 08.05.2010
Сообщений: 5
По умолчанию Синхронизация потоков

Пишу программу, завязанную на потоках. Задача следующая: Имеется файл F1, в котором записано 20 слов (можно больше). Три потока генерируют случайные числа в диапазоне 0 – 100. Если сгенерированное число больше 90, поток генерирует случайное число n от 1 до 20, открывает файл F1, берет из него слово под номером n, открывает файл F2 и вписывает взятое слово в него файлы F1 и F2 закрываются. Каждый поток должен записать в файл F2 по три слова.
Установила мьютекс, но все равно никак не получается синхронизировать потоки=( код отказывается правильно работать...Подскажите пожалуйста, что можно сделать?
Код:
#include <windows.h>
#include <stdlib.h>
#include <time.h>
#include <dos.h>
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
FILE *out;
FILE *in;

volatile int j=0;
HANDLE mut, mut1;
int a;

struct slovo
{
char word[10];
};
slovo all_word[20];


DWORD WINAPI slova(LPVOID ps)
{
   int *i = (int *)ps;
   int flag=(*i);
   int k=0;
randomize();
   if((in=fopen("F1.txt","r"))!=NULL)
    {
     while (!feof(in))
     {
      fscanf (in,"%s",(all_word+k)->word);
      k++;
      }
    }
     fclose(in);

   while(flag-(*i)<3)
   {
   sleep(random(3));
     WaitForSingleObject(mut, INFINITE);
   a=random(101);
   if (a>90)
   {
     a=random(20);
     out=fopen("F2.txt","a");
     fprintf(out, "%s  ",all_word[a].word);
     fclose(out);
     j++; ReleaseMutex(mut);
     flag=flag+1;
    }
    }
    }

void main(void)
{
	int i=0; int p[3];
   mut = CreateMutex(NULL, FALSE, "NT5BBMTX");

  	for(i=0; i<3; i++)
	 {
    p[i]=i;
    CreateThread(NULL,0,slova, (void *) (&p[i]),0,0);
   }
while (j<9);
cout << "\nPoluchennoe predlojenie zapisano v fail";

getch();
}
Подскажите пожалуйта, к
alenka_ej вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Синхронизация потоков в С++ erazer89 Помощь студентам 0 27.04.2010 20:14
синхронизация потоков m_kostik Win Api 0 26.03.2010 23:56
Синхронизация потоков с использованием именованых каналов _Денис Помощь студентам 0 09.01.2010 16:58
Синхронизация yarilo Софт 2 07.08.2009 15:50