From 428f035d9ea21d3e23dc9b96e72d3c7cd6a8c493 Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Tue, 1 Apr 2025 21:15:17 -0400 Subject: Add http-server example --- examples/http-server/connection-queue.tm | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 examples/http-server/connection-queue.tm (limited to 'examples/http-server/connection-queue.tm') diff --git a/examples/http-server/connection-queue.tm b/examples/http-server/connection-queue.tm new file mode 100644 index 00000000..a198f091 --- /dev/null +++ b/examples/http-server/connection-queue.tm @@ -0,0 +1,25 @@ +use pthreads + +func _assert_success(name:Text, val:Int32; inline): + fail("$name() failed!") if val < 0 + +struct ConnectionQueue(_connections=@[:Int32], _mutex=pthread_mutex_t.new(), _cond=pthread_cond_t.new()): + func enqueue(queue:ConnectionQueue, connection:Int32): + queue._mutex:lock() + queue._connections:insert(connection) + queue._mutex:unlock() + queue._cond:signal() + + + func dequeue(queue:ConnectionQueue -> Int32): + conn := none:Int32 + + queue._mutex:lock() + + while queue._connections.length == 0: + queue._cond:wait(queue._mutex) + + conn = queue._connections:pop(1) + queue._mutex:unlock() + queue._cond:signal() + return conn! -- cgit v1.2.3