summaryrefslogtreecommitdiffstats
path: root/src/fluent-bit/lib/lwrb/docs/examples_src/example_thread_safety.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/fluent-bit/lib/lwrb/docs/examples_src/example_thread_safety.c')
-rw-r--r--src/fluent-bit/lib/lwrb/docs/examples_src/example_thread_safety.c47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/fluent-bit/lib/lwrb/docs/examples_src/example_thread_safety.c b/src/fluent-bit/lib/lwrb/docs/examples_src/example_thread_safety.c
new file mode 100644
index 000000000..5ffdee291
--- /dev/null
+++ b/src/fluent-bit/lib/lwrb/docs/examples_src/example_thread_safety.c
@@ -0,0 +1,47 @@
+/* Declare variables */
+lwrb_t rb;
+
+/* 2 mutexes, one for write operations,
+ one for read operations */
+mutex_t m_w, m_r;
+
+/* 4 threads below, 2 for write, 2 for read */
+void
+thread_write_1(void* arg) {
+ /* Use write mutex */
+ while (1) {
+ mutex_get(&m_w);
+ lwrb_write(&rb, ...);
+ mutex_give(&m_w);
+ }
+}
+
+void
+thread_write_2(void* arg) {
+ /* Use write mutex */
+ while (1) {
+ mutex_get(&m_w);
+ lwrb_write(&rb, ...);
+ mutex_give(&m_w);
+ }
+}
+
+void
+thread_read_1(void* arg) {
+ /* Use read mutex */
+ while (1) {
+ mutex_get(&m_r);
+ lwrb_read(&rb, ...);
+ mutex_give(&m_r);
+ }
+}
+
+void
+thread_read_2(void* arg) {
+ /* Use read mutex */
+ while (1) {
+ mutex_get(&m_r);
+ lwrb_read(&rb, ...);
+ mutex_give(&m_r);
+ }
+} \ No newline at end of file