Блокировка C# () в Управляемом С++

Проверьте Набор тестов Phoronix , который является одним из наиболее широко используемого измерительного инструмента производительности и работает на Linux, FreeBSD, Windows, Mac OS X, и т.д.

Вот описание с их веб-сайта:

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

Первоначально разработанный для автоматизированного тестирования Linux, поддержка Набору тестов Phoronix была с тех пор добавлена для OpenSolaris, Apple Mac OS X, Microsoft Windows и операционные системы BSD . Набор тестов Phoronix состоит из легкого ядра обработки (pts-ядро) с каждым сравнительным тестом, состоящим из основанного на XML профиля и сценариев связанного ресурса. Процесс от установки сравнительного теста, к фактическому сравнительному тестированию, к парсингу важных аппаратных и программных компонентов в большой степени автоматизирован и абсолютно повторяемые, спрашивающие пользователи только для подтверждения действий.

21
задан Jon Cage 1 December 2011 в 10:12
поделиться

3 ответа

Эквивалентом блокировки / SyncLock было бы использование класса Monitor .

В .NET 1-3.5sp блокировка (obj) выполняет:

Monitor.Enter(obj);
try
{
    // Do work
}
finally
{
    Monitor.Exit(obj);
}

В .NET 4 это будет:

bool taken = false;
try
{
    Monitor.Enter(obj, ref taken);
    // Do work
}
finally
{
    if (taken)
    {
        Monitor.Exit(obj);
    }
}

Вы можете перевести это на C ++, выполнив:

System::Object^ obj = gcnew System::Object();
Monitor::Enter(obj);
try
{
    // Do work
}
finally
{
    Monitor::Exit(obj);
}
22
ответ дан 29 November 2019 в 06:13
поделиться

В C ++ нет эквивалента ключевому слову lock . Вместо этого вы можете сделать это:

Monitor::Enter(instanceToLock);
try
{
    // Only one thread could execute this code at a time
}
finally
{
    Monitor::Exit(instanceToLock);
}
2
ответ дан 29 November 2019 в 06:13
поделиться

Попробуйте Threading.Monitor. И лови.

-2
ответ дан 29 November 2019 в 06:13
поделиться
Другие вопросы по тегам:

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