Операции от atomic.h, кажется, являются неатомарными

Вы можете объявить глобальные переменные , используя глобальный объект NodeJS. Но в вашем случае вы хотите, чтобы k было 1, а это 0. Поскольку NodeJS является асинхронным , вы должны console.log (k) внутри обратного вызова.

Когда вы запускаете эту программу, console.log (k) и console.log (error) выполняется до того, как функция check1 возвращает значение в обратный вызов. Это асинхронный процесс. так что вы получаете k как 0. Чтобы решить эту проблему, вы должны console.log внутри обратного вызова

var k = 0;
var error = "error";

const { teamname, event_name, inputcount, name, roll } = req.body;
function check1(teamname, event_name, callback) {
        Register.find({ teamname: teamname, eventname: event_name }, (err, docs) => {
            callback(docs.length)
        });
    }
    check1(teamname, event_name, function (e) {
       if (e != 0) {
            console.log("executed");
            k = 1
       }
       console.log(k) // prints 0 or 1
       console.log(error) // prints "error"
    });

https://stackabuse.com/using-global-variables-in- узел-JS /

10
задан unwind 4 May 2009 в 08:41
поделиться

3 ответа

Можем ли мы взглянуть на вывод кода на ассемблере (думаю, gcc -E). Даже несмотря на то, что uname указывает, что он поддерживает SMP, это не обязательно означает, что он был скомпилирован с CONFIG_SMP.

Без этого выходной код ассемблера не имеет префикса lock , и вы можете найти свои ядра. мешая друг другу.

Но я бы все равно использовал функции pthread, поскольку они переносимы на большее количество платформ.

3
ответ дан 3 December 2019 в 23:51
поделиться

Вместо этого следует использовать встроенные модули gcc (см. this ). Это прекрасно работает, а также работает с icc.

int a; 
__sync_fetch_and_add(&a, 1); // atomic a++

Обратите внимание, что вы должны знать о проблемах согласованности кэша при изменении переменных без блокировки.

6
ответ дан 3 December 2019 в 23:51
поделиться

Этот старый пост подразумевает, что

  • Не очевидно, что вы должны включать этот заголовок ядра в программы пространства пользователя
  • Известно, что он не обеспечивает атомарности для программ пользовательского пространства.

Итак ... Возможно, в этом причина проблем, с которыми вы сталкиваетесь?

4
ответ дан 3 December 2019 в 23:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: