exponenta event banner

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

Число защищенных общих переменных

Описание

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

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

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

Примеры

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


#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 является защищенной общей переменной, если заданы следующие параметры:

ВыборСтоимость
Tasks (-entry-points)

task

interrupt_handler

Temporally exclusive tasks (-temporal-exclusions-file)temporal_exclusion.txt

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

-entry-points task,interrupt_handler  -temporal-exclusions-file temporal_exclusion.txt
temporal_exclusion.txt - текстовый файл, содержащий временные исключительные задачи, разделенные пробелом в одной строке:
task 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 является защищенной общей переменной, если указано следующее:

ВыборСтоимость
Точки входа

task

interrupt_handler

Детали критического разделаЗапуск подпрограммыЗавершение процедуры
take_semaphoregive_semaphore

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

-critical-section-begin  take_semaphore:cs1
-critical-section-end give_semaphore:cs1   
-entry-points task,interrupt_handle

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

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

Группа: Проект
Акроним: PSHV
ЕГО метрика: Нет
Представлен в R2018b