Number of Protected Shared Variables

Количество защищенных совместно используемых переменных

Описание

Эта метрика измеряет количество переменных со следующими свойствами:

  • Переменная используется больше чем в одной задаче.

  • Все операции на переменной защищены от прерывания до критических разделов или временных исключений.

Примеры

развернуть все

#include <limits.h>
int shared_var;

void inc() {
    shared_var+=2;
}

void reset() {
    shared_var = 0;
}

void task() {
    volatile int randomValue = 0;
    while(randomValue) {
        reset();
        inc();
        inc();
    }
}

void interrupt() {
    shared_var = INT_MAX;
}

void interrupt_handler() {
    volatile int randomValue = 0;
    while(randomValue) {
        interrupt();
    }
}

void main() {
}

В этом примере, shared_var защищенная совместно используемая переменная, если вы задаете следующие опции:

ОпцияЗначение
Entry points

task

interrupt_handler

Temporally exclusive taskstask interrupt_handler

Переменная совместно используется task и interrupt_handler. Однако, потому что task и interrupt_handler временно исключительны, операции на переменной не могут прервать друг друга.

#include <limits.h>
int shared_var;

void inc() {
    shared_var+=2;
}

void reset() {
    shared_var = 0;
}

void take_semaphore(void);
void give_semaphore(void);

void task() {
    volatile int randomValue = 0;
    while(randomValue) {
        take_semaphore();
        reset();
        inc();
        inc();
        give_semaphore();
    }
}

void interrupt() {
    shared_var = INT_MAX;
}

void interrupt_handler() {
    volatile int randomValue = 0;
    while(randomValue) {
        take_semaphore();
        interrupt();
        give_semaphore();
    }
}

void main() {
}

В этом примере, shared_var защищенная совместно используемая переменная, если вы задаете следующее:

ОпцияЗначение
Entry points

task

interrupt_handler

Critical section detailsStarting routineEnding routine
take_semaphoregive_semaphore

Переменная совместно используется task и interrupt_handler. Однако, потому что операции на переменной между вызовами запуска и конечной процедуры того же критического раздела, они не могут прервать друг друга.

Метрическая информация

Группа: проект
Акроним: PSHV
Метрика HIS: нет
Введенный в R2018b