барьеры в ядре SMP Linux - PullRequest
       18

барьеры в ядре SMP Linux

3 голосов
/ 02 апреля 2010

Есть ли что-то вроде pthread_barrier в ядре SMP Linux?

Когда ядро ​​работает одновременно на 2 и более процессорах с одинаковой структурой, барьер (например, pthread_barrier) может быть полезен. Он остановит все входящие в него процессоры, пока последний процессор не запустит барьер. С этого момента все процессоры снова работают.

Ответы [ 2 ]

5 голосов
/ 02 апреля 2010

Вы, вероятно, можете получить эквивалентное поведение, используя завершение:

struct fake_barrier_t {
  atomic_t count;
  struct completion comp;
}

/* run before each pass */
void initialize_fake_barrier(struct fake_barrier_t* b)
{
  atomic_set(&b->count, 0);
  init_completion(&b->comp);
}

/* make all tasks sleep until nth arrives, then wake all. */
void fake_barrier(struct fake_barrier_t* b, int n)
{
  if (atomic_inc_return(&b->count) < n)
    wait_for_completion(&b->comp);
  else
    complete_all(&b->comp);
}
2 голосов
/ 02 апреля 2010

Я не знаком с конструкцией pthread_barrier (), но ядро ​​имеет большое количество опций для барьеров памяти.

См. lxr барьеры памяти для документации

Если вы пытаетесь заставить набор потоков ждать друг друга, вы, вероятно, можете взломать что-нибудь вместе с мьютексами и / или очередями ожидания - хотя я не уверен, когда вы захотите это сделать. Когда вы хотите, чтобы потоки ожидали друг друга? Мне сейчас очень любопытно ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...