相关疑难解决方法(0)

JIT是出于这种行为的原因吗?

受这个问题的启发,我写了测试:

public class Main {

    private static final long TEST_NUMBERS = 5L;

    private static final long ITERATION_NUMBER = 100000L;

    private static long value;

    public static void main(final String [] args) throws Throwable {
        for(int i=0; i<TEST_NUMBERS; i++) {
            value = 0;
            final Thread incrementor = new Thread(new Incrementor());
            final Thread checker = new Thread(new Checker());
            incrementer.start();
            checker.start();
            checker.join();
            incrementer.join();
        }
    }

    static class Incrementor implements Runnable {
        public void run() {
            for(int i=0; i<ITERATION_NUMBER; i++){
                ++value;
            }
        } …
Run Code Online (Sandbox Code Playgroud)

java multithreading jit non-volatile

7
推荐指数
1
解决办法
321
查看次数

CRITICAL_SECTION用于设置和获取单个bool值

现在写class得很复杂,觉得我用得太多了CRITICAL_SECTION.

据我所知,某些类型的原子操作总是在没有任何硬件或软件中断的情况下执行.

我想检查一下我是否理解正确.

  • 要设置或获取原子值,我们不需要CRITICAL_SECTION因为这样做不会有中断.
  • bool 是原子的.

所以有我的陈述,想问一下,如果它们是正确的,如果它们是正确的,那么什么类型的变量也可以设置或没有CRITICAL_SECTION

PS我在谈论为每种方法获取或设置一个单值,而不是两个,而不是五个,而是一个.

c c++ windows winapi multithreading

4
推荐指数
1
解决办法
495
查看次数

线程互斥行为

我正在学习C.我正在编写一个包含多个线程的应用程序; 我知道当一个变量在两个或多个线程之间共享时,最好使用互斥锁来锁定/解锁,以避免死锁和变量的不一致.当我想要更改或查看一个变量时,这一点非常清楚.

int i = 0; /** Global */
static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;

/** Thread 1. */
pthread_mutex_lock(&mutex);
i++;
pthread_mutex_unlock(&mutex);

/** Thread 2. */
pthread_mutex_lock(&mutex);
i++;
pthread_mutex_unlock(&mutex);
Run Code Online (Sandbox Code Playgroud)

我认为这是正确的.i在执行结束时,变量包含整数2.
无论如何,在某些情况下,我不知道确切地将两个函数调用放在哪里.

例如,假设您有一个函数obtain(),它返回一个全局变量.我需要从两个线程中调用该函数.我还有另外两个调用函数的线程,set()用一些参数定义; 此函数将设置相同的全局变量.在获取/设置var之前需要执行某些操作时,这两个函数是必需的.

/** (0) */
/** Thread 1, or 2, or 3... */
if(obtain() == something) {

    if(obtain() == somethingElse) {
        // Do this, sometimes obtain() and sometimes set(random number) (1)   
    } else {
        // Do that, just obtain(). (2)
    }

} …
Run Code Online (Sandbox Code Playgroud)

c mutex

3
推荐指数
1
解决办法
818
查看次数

标签 统计

c ×2

multithreading ×2

c++ ×1

java ×1

jit ×1

mutex ×1

non-volatile ×1

winapi ×1

windows ×1