コード例 #1
0
ファイル: thread.c プロジェクト: charlydagos/mruby-uv
static mrb_value
mrb_uv_barrier_init(mrb_state *mrb, mrb_value self)
{
  mrb_int arg_count;
  uv_barrier_t* context = NULL;

  mrb_get_args(mrb, "i", &arg_count);

  context = (uv_barrier_t*)mrb_malloc(mrb, sizeof(uv_barrier_t));

  mrb_uv_check_error(mrb, uv_barrier_init(context, arg_count));
  DATA_PTR(self) = context;
  DATA_TYPE(self) = &barrier_type;
  return self;
}
コード例 #2
0
ファイル: main.c プロジェクト: kasicass/kasicass
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;
}
コード例 #3
0
ファイル: thread.c プロジェクト: JoneXiong/pyuv
static int
Barrier_tp_init(Barrier *self, PyObject *args, PyObject *kwargs)
{
    unsigned int count;

    UNUSED_ARG(kwargs);

    RAISE_IF_INITIALIZED(self, -1);

    if (!PyArg_ParseTuple(args, "I:__init__", &count)) {
        return -1;
    }

    if (uv_barrier_init(&self->uv_barrier, count)) {
        PyErr_SetString(PyExc_ThreadError, "Error initializing Barrier");
        return -1;
    }

    self->initialized = True;
    return 0;
}
コード例 #4
0
ファイル: main.c プロジェクト: cloud-hot/libuv-dox
// 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;
}