我想编写一个程序,该程序产生两个线程,这些线程锁定a Mutex,增加它,打印内容然后解锁,Mutex以便另一个线程可以执行相同的操作。我添加了一些睡眠时间以使其更加一致,因此我认为输出应为:
ping pong ping pong …
Run Code Online (Sandbox Code Playgroud)
但实际输出是相当随机的。大多数时候,它只是
ping ping ping … pong
Run Code Online (Sandbox Code Playgroud)
但是根本没有一致性。有时中间也有一个“乒乓球”。
我相信互斥锁可以通过某种方式来确定谁想最后锁定它,但事实并非如此。
use std::sync::{Arc, Mutex};
use std::{thread, time};
fn main() {
let data1 = Arc::new(Mutex::new(1));
let data2 = data1.clone();
let ten_millis = time::Duration::from_millis(10);
let a = thread::spawn(move || loop {
let mut data = data1.lock().unwrap();
thread::sleep(ten_millis);
println!("ping ");
*data += 1;
if *data > 10 {
break;
}
});
let b = thread::spawn(move || loop {
let mut data = data2.lock().unwrap();
thread::sleep(ten_millis); …Run Code Online (Sandbox Code Playgroud) 我目前正在学习用于3D渲染的OpenGL,我无法完全了解有关着色器和VBO的一些事情,我得到所有VBO共享一个索引,因此您需要复制一些数据
但是当你创建更多的VBO时,几乎没有具有共享相同位置法线和纹理坐标的顶点的面,所以索引至少从我的观点来看是相当无用的,它基本上只是一个连续数字的数组.
是否有一个方面的指数我看不到?