Avoid common concurrency anti-patterns that lead to race conditions, deadlocks, and unreliable behavior. Use structured approaches instead of ad-hoc solutions.
Key anti-patterns to avoid:
Preferred approaches:
drop()
when neededExample:
// Anti-pattern: Manual buffer management with select!
select! {
n = stdout_reader.read_until(b'\n', &mut stdout_buf) => {
// Risk of losing last chunk of data
}
}
// Better: Use streams
let stdout_stream = LinesStream::new(BufReader::new(stdout).lines());
let stderr_stream = LinesStream::new(BufReader::new(stderr).lines());
// Drive streams to completion without manual buffer management
// Anti-pattern: Wrong lock type
pub(super) extension_manager: Mutex<ExtensionManager>, // Blocks concurrent readers
// Better: Allow concurrent reads
pub(super) extension_manager: RwLock<ExtensionManager>, // Multiple readers, single writer
Enter the URL of a public GitHub repository