Rust forces you to understand how to build thread safe and memory safe code.

ChatGPT… 😀

…In Rust, a Mutex (short for mutual exclusion) is a concurrency primitive used to protect shared data from simultaneous access by multiple threads. It allows only one thread at a time to access the data it protects, ensuring that no two threads modify the same piece of data at the same time, which could cause data races.

Here is a basic example of a Mutex use in Rust:

```rust

use std::sync::{Arc, Mutex};

use std::thread;

fn main() {

let counter = Arc::new(Mutex::new(0));

let mut handles = vec![];

for _ in 0..10 {

let counter = Arc::clone(&counter);

let handle = thread::spawn(move || {

let mut num = counter.lock().unwrap();

*num += 1;

});

handles.push(handle);

}

for handle in handles {

handle.join().unwrap();

}

println!("Result: {}", *counter.lock().unwrap());

}

```

This program creates a Mutex-protected counter shared among ten threads, each of which increments the counter once. Note that `Arc` is used to enable shared ownership of the Mutex across multiple threads. The `lock` method locks the Mutex and returns a guard, `MutexGuard`, that dereferences into the protected data. The guard also automatically releases the lock when it's dropped.

If a thread can't lock a Mutex because it's already locked by another thread, it'll block until the Mutex is unlocked. The `unwrap()` method is used here to handle potential lock poisoning: if a thread panics while holding the lock, subsequent lock attempts will fail with an error. By calling `unwrap()`, we choose to panic in such cases.

Reply to this note

Please Login to reply.

Discussion

No replies yet.