txlyre 1 gün önce
ebeveyn
işleme
49f5660415
1 değiştirilmiş dosya ile 45 ekleme ve 25 silme
  1. 45 25
      qic.c

+ 45 - 25
qic.c

@@ -2959,38 +2959,58 @@ const char *STD[][2] = {
     "  },\n"
     "  is_joined: func (this): this._thread.joined\n"
     "})\n"
-    "func Lock(acquired=false) {\n"
-    "  inline `void *lock = qi_lock_create()`\n"
-    "  inline `if (!lock) qi_throw_format(state, \"lock init failed\")`\n"
-    "  inline `qi_decl(state, \"lock\", qi_make_data(state, 'L', lock))`\n"
-    "  var l = Object({\n"
+    "func Mutex() {\n"
+    "  inline `void *mutex = qi_mutex_create()`\n"
+    "  inline `if (!mutex) qi_throw_format(state, \"mutex init failed\")`\n"
+    "  inline `qi_decl(state, \"mutex\", qi_make_data(state, 'M', mutex))`\n"
+    "  return Object({\n"
     "    __fin: func (this) {\n"
-    "      var lock = this._lock\n"
-    "      this._lock = nil\n"
-    "      inline `qi_lock_destroy(qi_get_data(state, 'L', qi_get(state, \"lock\")))`\n"
+    "      mutex = this._mutex\n"
+    "      this._mutex = nil\n"
+    "      inline `qi_mutex_destroy(qi_get_data(state, 'M', qi_get(state, \"mutex\")))`\n"
     "    },\n"
-    "    __str: func (this): \"<Lock>\",\n"
-    "    _lock: lock,\n"
-    "    acquired: func (this) {\n"
-    "      var lock = this._lock\n"
-    "      inline `return qi_make_boolean(state, qi_lock_acquired(qi_get_data(state, 'L', qi_get(state, \"lock\"))))`\n"
+    "    __str: func (this): \"<Mutex>\",\n"
+    "    _mutex: mutex,\n"
+    "    lock: func (this) {\n"
+    "      var mutex = this._mutex\n"
+    "      inline `qi_mutex_lock(qi_get_data(state, 'M', qi_get(state, \"mutex\")))`\n"
     "    },\n"
-    "    acquire: func (this) {\n"
-    "      var lock = this._lock\n"
-    "      inline `qi_lock_acquire(qi_get_data(state, 'L', qi_get(state, \"lock\")))`\n"
+    "    trylock: func (this) {\n"
+    "      var mutex = this._mutex\n"
+    "      inline `return qi_make_boolean(state, qi_mutex_trylock(qi_get_data(state, 'M', qi_get(state, \"mutex\"))))`\n"
     "    },\n"
-    "    tryacquire: func (this) {\n"
-    "      var lock = this._lock\n"
-    "      inline `return qi_make_boolean(state, qi_lock_tryacquire(qi_get_data(state, 'L', qi_get(state, \"lock\"))))`\n"
+    "    unlock: func (this) {\n"
+    "      var mutex = this._mutex\n"
+    "      inline `qi_mutex_unlock(qi_get_data(state, 'M', qi_get(state, \"mutex\")))`\n"
+    "    }\n"
+    "  })\n"
+    "}\n"
+    "func Cond() {\n"
+    "  inline `void *cond = qi_cond_create()`\n"
+    "  inline `if (!cond) qi_throw_format(state, \"cond init failed\")`\n"
+    "  inline `qi_decl(state, \"cond\", qi_make_data(state, 'C', cond))`\n"
+    "  return Object({\n"
+    "    __fin: func (this) {\n"
+    "      cond = this._cond\n"
+    "      this._cond = nil\n"
+    "      inline `qi_cond_destroy(qi_get_data(state, 'C', qi_get(state, \"cond\")))`\n"
+    "    },\n"
+    "    __str: func (this): \"<Cond>\",\n"
+    "    _cond: cond,\n"
+    "    wait: func (this, mutex) {\n"
+    "      var cond = this._cond\n"
+    "      mutex = mutex._mutex\n"
+    "      inline `qi_cond_wait(qi_get_data(state, 'C', qi_get(state, \"cond\")), qi_get_data(state, 'M', qi_get(state, \"mutex\")))`\n"
     "    },\n"
-    "    release: func (this) {\n"
-    "      var lock = this._lock\n"
-    "      inline `qi_lock_release(qi_get_data(state, 'L', qi_get(state, \"lock\")))`\n"
+    "    signal: func (this) {\n"
+    "      var cond = this._cond\n"
+    "      inline `qi_cond_signal(qi_get_data(state, 'C', qi_get(state, \"cond\")))`\n"
+    "    },\n"
+    "    broadcast: func (this) {\n"
+    "      var cond = this._cond\n"
+    "      inline `qi_cond_broadcast(qi_get_data(state, 'C', qi_get(state, \"cond\")))`\n"
     "    }\n"
     "  })\n"
-    "  if acquired\n"
-    "    l.acquire()\n"
-    "  return l\n"
     "}\n"
     "func thread_exit(ret=nil)\n"
     "  inline `qi_thread_exit(state, qi_get(state, \"ret\"))`\n"