Function kdbplus::api::native::setm [−][src]
pub unsafe extern "C" fn setm(lock: I) -> I
Expand description
Set whether interning symbols uses a lock: lock
is either 0 or 1.
Returns the previously set value.
Example
#[macro_use] extern crate kdbplus; use kdbplus::api::*; use kdbplus::api::native::*; #[no_mangle] pub extern "C" fn parallel_sym_change(list: K) -> K{ unsafe{ // `K` cannot have `Send` because it is a pointer but `k0` does. let mut inner=*list; // Lock symbol before creating an internal symbol on another thread. setm(1); let task=std::thread::spawn(move || { inner.as_mut_slice::<S>()[0]=ss(str_to_S!("replaced")); inner }); list.as_mut_slice::<S>()[1]=ss(str_to_S!("symbolbol")); match task.join(){ Err(_) => { // Unlock. setm(0); krr(null_terminated_str_to_const_S("oh no")) }, Ok(l) => { // Unlock. setm(0); (*list)=l; // Increment reference count for copy. r1(list) } } } }
q)alms_with_left_hand: `libc_api_examples 2: (`parallel_sym_change; 2);
q)alms_with_left_hand[`a`b];
`replaced`symbolbol