Меня смущает, как работает Big-O при работе с функциями внутри функций (при анализе наихудшего случая). Например, что если у вас есть что-то вроде:
for(int a = 0; a < n; a++)
{
*some function that runs in O(n*log(n))*
for(int b = 0; b < n; b++)
{
*do something in constant time*
}
}
Будет ли весь этот блок работать в O (n ^ 2 * log (n)), потому что в первом цикле для, у вас есть O (n) и O (n * log (n)), так что O (n * log (n)) больше, и поэтому тот, который мы берем? Или это O (n ^ 3 * log (n)), потому что у вас есть O (n) и O (n * log (n)) во внешнем цикле for?
Любая помощь ценится! Спасибо!
-121--1751172-
На главной странице видно, что даже при инициализации семафора значением единицы:
sem_init(&mySem, 0, 1);
Он все еще может быть увеличен до значения больше 1 с несколькими вызовами
sem_post(&mySem);
Но в этом примере кода комментарий, кажется, думает по-другому:
sem_init(&mutex, 0, 1); /* initialize mutex to 1 - binary semaphore */
Возможно ли инициализировать строго двоичный семафор в C?
Примечание: Причина этого вместо использования мьютекса в этом случае заключается в том, что sem_post и sem_wait могут вызываться различными потоками.