From 5deb1924677969f6885e0368c52037c435eddab8 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Sun, 12 Jun 2022 20:04:49 +0200 Subject: [PATCH] moved pool test code to external module --- src/main.rs | 87 --------------------------------------------- src/pool_test.rs | 92 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+), 87 deletions(-) create mode 100644 src/pool_test.rs diff --git a/src/main.rs b/src/main.rs index 26abc68..3033f62 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,91 +1,4 @@ -use std::sync::{Arc, RwLock}; -use std::thread; -struct PoolDummy { - test_buf: [u8; 128], -} - -struct PoolAccessDummy<'a> { - pool_dummy: &'a mut PoolDummy, - no_deletion: bool, -} - -impl PoolAccessDummy<'_> { - fn modify(&mut self) -> &mut [u8] { - self.pool_dummy.modify() - } - - fn release(&mut self) { - self.no_deletion = true; - } -} - -impl Drop for PoolAccessDummy<'_> { - fn drop(&mut self) { - if self.no_deletion { - println!("Pool access: Drop with no deletion") - } else { - self.pool_dummy.delete(); - println!("Pool access: Drop with deletion"); - } - } -} - -impl Default for PoolDummy { - fn default() -> Self { - PoolDummy { test_buf: [0; 128] } - } -} - -impl PoolDummy { - fn modify(&mut self) -> &mut [u8] { - self.test_buf.as_mut_slice() - } - - fn modify_with_accessor(&mut self) -> PoolAccessDummy { - PoolAccessDummy { - pool_dummy: self, - no_deletion: false, - } - } - - fn read(&self) -> &[u8] { - self.test_buf.as_slice() - } - - fn delete(&mut self) { - println!("Store content was deleted"); - } -} fn main() { - println!("Hello World"); - let shared_dummy = Arc::new(RwLock::new(PoolDummy::default())); - let shared_clone = shared_dummy.clone(); - let jh0 = thread::spawn(move || loop { - { - let mut dummy = shared_dummy.write().unwrap(); - let buf = dummy.modify(); - buf[0] = 1; - let mut accessor = dummy.modify_with_accessor(); - let buf = accessor.modify(); - buf[0] = 2; - } - }); - - let jh1 = thread::spawn(move || loop { - { - let dummy = shared_clone.read().unwrap(); - let buf = dummy.read(); - println!("Buffer 0: {:?}", buf[0]); - } - - let mut dummy = shared_clone.write().unwrap(); - let mut accessor = dummy.modify_with_accessor(); - let buf = accessor.modify(); - buf[0] = 3; - accessor.release(); - }); - jh0.join().unwrap(); - jh1.join().unwrap(); } diff --git a/src/pool_test.rs b/src/pool_test.rs new file mode 100644 index 0000000..cc6a57e --- /dev/null +++ b/src/pool_test.rs @@ -0,0 +1,92 @@ +use std::sync::{Arc, RwLock}; +use std::thread; + +struct PoolDummy { + test_buf: [u8; 128], +} + +struct PoolAccessDummy<'a> { + pool_dummy: &'a mut PoolDummy, + no_deletion: bool, +} + +impl PoolAccessDummy<'_> { + fn modify(&mut self) -> &mut [u8] { + self.pool_dummy.modify() + } + + fn release(&mut self) { + self.no_deletion = true; + } +} + +impl Drop for PoolAccessDummy<'_> { + fn drop(&mut self) { + if self.no_deletion { + println!("Pool access: Drop with no deletion") + } else { + self.pool_dummy.delete(); + println!("Pool access: Drop with deletion"); + } + } +} + +impl Default for PoolDummy { + fn default() -> Self { + PoolDummy { test_buf: [0; 128] } + } +} + +impl PoolDummy { + fn modify(&mut self) -> &mut [u8] { + self.test_buf.as_mut_slice() + } + + fn modify_with_accessor(&mut self) -> PoolAccessDummy { + PoolAccessDummy { + pool_dummy: self, + no_deletion: false, + } + } + + fn read(&self) -> &[u8] { + self.test_buf.as_slice() + } + + fn delete(&mut self) { + println!("Store content was deleted"); + } +} + +fn pool_test() { + println!("Hello World"); + let shared_dummy = Arc::new(RwLock::new(PoolDummy::default())); + let shared_clone = shared_dummy.clone(); + let jh0 = thread::spawn(move || loop { + { + let mut dummy = shared_dummy.write().unwrap(); + let buf = dummy.modify(); + buf[0] = 1; + + let mut accessor = dummy.modify_with_accessor(); + let buf = accessor.modify(); + buf[0] = 2; + } + }); + + let jh1 = thread::spawn(move || loop { + { + let dummy = shared_clone.read().unwrap(); + let buf = dummy.read(); + println!("Buffer 0: {:?}", buf[0]); + } + + let mut dummy = shared_clone.write().unwrap(); + let mut accessor = dummy.modify_with_accessor(); + let buf = accessor.modify(); + buf[0] = 3; + accessor.release(); + }); + jh0.join().unwrap(); + jh1.join().unwrap(); +}