Если переменная может быть изменена другим потоком, вы должны защитить ее. Никакой магии здесь - языки высокого уровня могли бы делать такой вызов функции атомарно, и это «магия», отсутствующая в C.
Обратите внимание, что для защиты (с помощью одной блокировки) требуется как значение указателя 'variable' (адрес строки в памяти), так и сама строка (примечание: на нее может ссылаться и другой указатель). Если строка изменяется во время работы strcmp, вы можете получить ложный результат, переполнение буфера и ошибку сегментации.