да, нужна аккуратность. Либо  /* (c) 1985, Phoenix Computer Products Corp. and Novum Organum, Inc. */
#include "pdefs.h"
strtoken(char  *token, char  *str, char  *separators){
  int off, rc;
  rc = RC_SUCCESS;
  strtrim(str);
  off = strinspn(separators, str);
  if  (off>NOTFND)
    {
    strancpy(token, str, off+1);
    strdel(str, off);
    strtrim(str);
    if  (stridxc(*str,separators)>NOTFND)
      {
      strdel(str,1);
      strtrim(str);
      }
    }
  else
  if  (*str)
    {
    stracpy(token,str);
    *str = EOS;
    }
  else
    {
    *token = EOS;
    rc = RC_FAIL;
    }
  return (rc);
}
 
-разбор делать в одной задаче
-обернуть ф-и семафором
-не использовать стандартную библиотеку, а использовать стороннюю. Я пользую pforce
ее, есно, нужно переделать под ОС, что и делается по необходимости
 rc = strtoken(token, str, separators);                 /int/
              грамматический разбор символа из строки
Описание аргументов:
    char *str;     строка (Для strdxrv() это указатель на середину строки)
    char *separators;   набор символов, которые являются символами ограничения
                        в строке. Вы должны включить пробел и табуляцию в
                   этот список, если вы хотите их использовать как разделители
    сhar *token[]; буфер, содержащий набор символов переданных из STR.
                   Первый символ - это всегда не пробел и отделен одним
                   из символов разделителей.
         Выполнение StrToken().
         ______________________
    StrToken() удаляет набор символов из вводимой  строки.  Все  лидирующие  и
конечные  пробелы  удаляются  из  STR, которая затем просматривается в поисках
символа - SEPARATOR. Все символы выбираются, не включая символ- разделитель, и
возвращаются,  как  следующая лексема в TOKEN. Разделитель и символы - лексемы
удаляются из строки. Если разделители не найдены, в TOKEN возвращается  полное
содержание STR, а STR устанавливается в нуль и возвращается RC_FAIL.
    Заметим,  что  вы должны определить пробелы и табуляции в SEPARATORS, если
вы желаете использовать их в качестве разделителей. Также заметим,  что  могут
возвращаться  пустые  символы.  Например,  если  запятая,  пробел  и  точка  -
разделители и STR содержит "a, b, c, .. d", то 5  лексем  будет  возвращено  :
"а", "b", "c", " ", "d". Четвертая лексема - пустая.