LINUX.ORG.RU

thread-safe function ?


0

0

Здравствуйте. Есть к примеру функция f1():
char *
f1(char *a)
{
   char buf[SZ];
   return f2(a, buf, SZ);
}

char *
f2(char *a, char *buf, size_t sz)
{
.....
}

f2() что-то делает со строкой "а", используя переданный ей из f1()
буфер "buf". В данном случае f1() является thread-safe? Или надо
буфер передывать из функции, которая вызывает f1() ?
anonymous

ты по началу разберись с этими 2 функциями без потоков, а потом уж в с ними ;)

Pi ★★★★★
()

Pi намекает, что приведенной конструкции недостаточно для ответа на вопрос.

Все же, видимо, тут можно довольно однозначно ответить: _если_ приведенная конструкция работает корректно в однонитевом приложении, то она будет настолько же корректно работать в многонитевом приложении (если только не запускать f2 "ниткой").

Die-Hard ★★★★★
()
Ответ на: комментарий от Die-Hard

мне расположение буфера не нравится: она по-моему и в одной нити толком не будет работать - я про это.

Pi ★★★★★
()
Ответ на: комментарий от Pi

2Pi;

Да, и я про то же, см. оговорку.

Но, может, он хочет просто строку инвертировать (в f1 нет const) (хотя глупо использовать буфер для такого), или спросить "Введите простое число" и вернуть NULL, если сумма char'ов в строке на это число делится, или саму строку, если нет...

Die-Hard ★★★★★
()
Ответ на: комментарий от Die-Hard

Да, простите, ессно это не реальная функция. f1() делает так:

char *
f1()
{
    return strdup(f2(a, buf, SZ));
}

т.е. возвращает копию строки. Копия снимается с buf. В этом случае
нормально в многопоточном варианте будет работать?

anonymous
()
Ответ на: комментарий от Pi

> нет: ф11 мжет начать работу над строкой, которая "недоперевёрнута" ф12

f2 всегда работает с локальной копией данных f1 - в чем собственно будут проблемы? все данные живут на стеке.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

ооой, я f2 вообще не углядел межда скобок :) - принимайте извинения

Pi ★★★★★
()
Ответ на: комментарий от klalafuda

Ugu, спасибо, я тоже про этоу подумал. Я наверное просто перевутал со статическими данными вот и засомневался. Спасибо за помощь

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.