Exemple #1
0
static mrb_value
mrb_uv_barrier_destroy(mrb_state *mrb, mrb_value self)
{
  uv_barrier_destroy((uv_barrier_t*)mrb_uv_get_ptr(mrb, self, &barrier_type));
  mrb_free(mrb, DATA_PTR(self));
  DATA_PTR(self) = NULL;
  return self;
}
Exemple #2
0
/*********************************************************
 * UV::Barrier
 *********************************************************/
static void
mrb_uv_barrier_free(mrb_state *mrb, void *p)
{
  if(p) {
    uv_barrier_destroy((uv_barrier_t*)p);
    mrb_free(mrb, p);
  }
}
Exemple #3
0
static void
Barrier_tp_dealloc(Barrier *self)
{
    if (self->initialized) {
        uv_barrier_destroy(&self->uv_barrier);
    }
    Py_TYPE(self)->tp_free(self);
}
Exemple #4
0
int main()
{
	uv_thread_t threads[3];
	int thread_nums[] = {1, 2, 1};

	uv_barrier_init(&blocker, 4);

	shared_num = 0;
	uv_rwlock_init(&numlock);

	uv_thread_create(&threads[0], reader, &thread_nums[0]);
	uv_thread_create(&threads[1], reader, &thread_nums[1]);
	uv_thread_create(&threads[2], writer, &thread_nums[2]);

	uv_barrier_wait(&blocker);
	uv_barrier_destroy(&blocker);

	uv_rwlock_destroy(&numlock);
	return 0;
}
Exemple #5
0
// same as ./10-locks, but using try* functions when obtaining read and write locks
//
int main() {
  int r;
  const int count = 4;

  fprintf(stderr, "barrier: init\n");
  uv_barrier_init(&blocker, count);

  shared_num = 0;

  // https://github.com/thlorenz/libuv-dox/blob/master/methods.md#rwlock
  fprintf(stderr, "rwlock: init\n");
  r = uv_rwlock_init(&numlock);
  if (r) ERROR("rwlock_init", r);

  uv_thread_t threads[3];

  int thread_nums[] = { 1, 2, 1 };
  r = uv_thread_create(&threads[0], reader_entry, &thread_nums[0]);
  if (r) ERROR("thread_create", r);

  r = uv_thread_create(&threads[1], reader_entry, &thread_nums[1]);
  if (r) ERROR("thread_create", r);

  r = uv_thread_create(&threads[2], writer_entry, &thread_nums[2]);
  if (r) ERROR("thread_create", r);

  // https://github.com/thlorenz/libuv-dox/blob/master/methods.md#barrier
  fprintf(stderr, "barrier: wait\n");
  uv_barrier_wait(&blocker);

  fprintf(stderr, "barrier: destroy\n");
  uv_barrier_destroy(&blocker);

  fprintf(stderr, "rwlock: destroy\n");
  uv_rwlock_destroy(&numlock);
  if (r) ERROR("rwlock_destroy", r);

  return 0;
}