Войти
ПрограммированиеПодсказкиОбщее

Красивый способ создания потоков.

Внимание! Этот документ ещё не опубликован.

Автор:

По моему мнению, на данный момент, процесс создания потоков и их синхронизация выглядит не очень красиво, но с приходом С++11 появилась возможность придумать красивое решение на подобии решения в GO.
Для этого нам понадобятся несколько классов и макросов.
Код не позиционируется как идеальный, и написан лишь для демонстрации принципа работы

THREAD
{
// Some parallel code 
}

Класс для синхронизации который является простой обёрткой над мьютексом.

+ Mutex

Класс авто освобождения мьютекса и для автоматического создания

+ Locker

Класс для создания нового потока.

+ Thread

Макросы.

+ Macros

И собственно говоря пример использования.

void Test()
{
  LOCK;
  static int sv_I = 0;

  sv_I++;
  Sleep(rand() % 5);
  cout<< sv_I << ' ';
}


void Test3()
{
  int i = 0;

  THREAD_EX(&i)
  {
    while(i<=20)
    {
      Sleep(rand() % 200);
      i++;
    }
  };

  while(i<=20)
  {
    Sleep(49);
    cout<< i <<' ';
  }

}


void main()
{
  THREAD
  {
    Test();
  };

  for(int i = 0; i<10; i++)THREAD
  {
    Test();
  };

  THREAD_FUNC &Test;

  THREAD_FUNC []()
  {
    Test();
  };

  Sleep(4000);
  
  cout<<"\n";
  Test3();

  cin.ignore();
}

#C++, #макросы, #многопоточность

22 апреля 2013 (Обновление: 30 апр. 2013)

Комментарии [30]