diff third_party/libuv/docs/code/locks/main.c @ 160:948de3f54cea

[ThirdParty] Added libuv
author June Park <parkjune1995@gmail.com>
date Wed, 14 Jan 2026 19:39:52 -0800
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/third_party/libuv/docs/code/locks/main.c	Wed Jan 14 19:39:52 2026 -0800
@@ -0,0 +1,57 @@
+#include <stdio.h>
+#include <uv.h>
+
+uv_barrier_t blocker;
+uv_rwlock_t numlock;
+int shared_num;
+
+void reader(void *n)
+{
+    int num = *(int *)n;
+    int i;
+    for (i = 0; i < 20; i++) {
+        uv_rwlock_rdlock(&numlock);
+        printf("Reader %d: acquired lock\n", num);
+        printf("Reader %d: shared num = %d\n", num, shared_num);
+        uv_rwlock_rdunlock(&numlock);
+        printf("Reader %d: released lock\n", num);
+    }
+    uv_barrier_wait(&blocker);
+}
+
+void writer(void *n)
+{
+    int num = *(int *)n;
+    int i;
+    for (i = 0; i < 20; i++) {
+        uv_rwlock_wrlock(&numlock);
+        printf("Writer %d: acquired lock\n", num);
+        shared_num++;
+        printf("Writer %d: incremented shared num = %d\n", num, shared_num);
+        uv_rwlock_wrunlock(&numlock);
+        printf("Writer %d: released lock\n", num);
+    }
+    uv_barrier_wait(&blocker);
+}
+
+int main()
+{
+    uv_barrier_init(&blocker, 4);
+
+    shared_num = 0;
+    uv_rwlock_init(&numlock);
+
+    uv_thread_t threads[3];
+
+    int thread_nums[] = {1, 2, 1};
+    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;
+}