use parking_lot RwLock
The std::sync::RwLock is platform dependent, and is unfair on Linux (may starve writer)
This commit is contained in:
parent
f00c1813e3
commit
8452579c67
|
@ -467,6 +467,7 @@ dependencies = [
|
|||
"itertools",
|
||||
"num-bigint 0.3.2",
|
||||
"num-traits",
|
||||
"parking_lot",
|
||||
"rustpython-parser",
|
||||
"test-case",
|
||||
]
|
||||
|
|
|
@ -11,6 +11,7 @@ inkwell = { git = "https://github.com/TheDan64/inkwell", branch = "master", feat
|
|||
rustpython-parser = { git = "https://github.com/RustPython/RustPython", branch = "master" }
|
||||
itertools = "0.10.1"
|
||||
crossbeam = "0.8.1"
|
||||
parking_lot = "0.11.1"
|
||||
|
||||
[dev-dependencies]
|
||||
test-case = "1.2.0"
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
use std::collections::HashMap;
|
||||
use std::{collections::HashMap, sync::Arc};
|
||||
|
||||
use super::typedef::{SharedUnifier, Type};
|
||||
use super::typedef::{SharedUnifier, Type, Unifier};
|
||||
use crossbeam::queue::SegQueue;
|
||||
use crossbeam::sync::ShardedLock;
|
||||
use parking_lot::RwLock;
|
||||
use rustpython_parser::ast::Stmt;
|
||||
|
||||
pub struct DefinitionId(usize);
|
||||
|
@ -45,7 +45,12 @@ pub struct CodeGenTask {
|
|||
}
|
||||
|
||||
pub struct TopLevelContext {
|
||||
pub definitions: Vec<ShardedLock<TopLevelDef>>,
|
||||
pub definitions: Vec<RwLock<TopLevelDef>>,
|
||||
pub unifiers: Vec<SharedUnifier>,
|
||||
pub codegen_queue: SegQueue<CodeGenTask>,
|
||||
}
|
||||
|
||||
pub struct WorkerContext {
|
||||
pub unifier: Unifier,
|
||||
pub top_level_ctx: Arc<RwLock<TopLevelContext>>,
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue