小编Bla*_*tus的帖子

为什么Rust互斥锁似乎没有将锁锁定到想要最后锁定它的线程?

我想编写一个程序,该程序产生两个线程,这些线程锁定a Mutex,增加它,打印内容然后解锁,Mutex以便另一个线程可以执行相同的操作。我添加了一些睡眠时间以使其更加一致,因此我认为输出应为:

ping pong ping pong …  
Run Code Online (Sandbox Code Playgroud)

但实际输出是相当随机的。大多数时候,它只是

ping ping ping … pong 
Run Code Online (Sandbox Code Playgroud)

但是根本没有一致性。有时中间也有一个“乒乓球”。

我相信互斥锁可以通过某种方式来确定谁想最后锁定它,但事实并非如此。

  1. 锁定实际上如何工作?
  2. 如何获得所需的输出?
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)

multithreading mutex shared-memory rust

8
推荐指数
2
解决办法
265
查看次数

OpenGL indicesBuffer值得使用吗?

我目前正在学习用于3D渲染的OpenGL,我无法完全了解有关着色器和VBO的一些事情,我得到所有VBO共享一个索引,因此您需要复制一些数据

但是当你创建更多的VBO时,几乎没有具有共享相同位置法线和纹理坐标的顶点的面,所以索引至少从我的观点来看是相当无用的,它基本上只是一个连续数字的数组.

是否有一个方面的指数我看不到?

opengl shader

-1
推荐指数
1
解决办法
131
查看次数

标签 统计

multithreading ×1

mutex ×1

opengl ×1

rust ×1

shader ×1

shared-memory ×1