Каждый раз, когда вызывается функция, если ее результат для данного набора значений аргументов еще не запомнен, я хотел бы поместить результат в память стол. Один столбец предназначен для хранения результата, а другой - для хранения значений аргументов.
Как мне лучше всего это реализовать? Аргументы бывают разных типов, включая некоторые перечисления.
В C # я бы обычно использовал DataTable.
sem_wait ()
и sem_post ()
работают так же медленно, как и когда их нет (есть разница, но я подумал, что это будет огромная разница между состязанием и нет; я ожидал, что числа вроде того, что было в коде dispatch_semaphore) sem_wait ()
и sem_post ()
медленнее при использовании именованных семафоров.
dispatch_semaphore_wait ()
и dispatch_semaphore_signal ()
работают безумно быстро, когда не вызывают споров (неудивительно, поскольку Apple это много рекламирует). dispatch_semaphore_wait ()
и dispatch_semaphore_signal ()
в 3 раза медленнее, чем sem_wait ()
и sem_post ()
в состоянии конкуренции
dispatch_once ()
быстрее, чем pthread_once ()
, примерно в 10 раз, почему? Единственное, что я могу сказать по заголовкам, это то, что с dispatch_once ()
нет нагрузки на вызовы функций, чем с pthread_once ()
. Мотивация: Мне представлены 2 набора инструментов для выполнения работы для семафоров или однократных вызовов (тем временем я фактически нашел другие варианты семафоров, но я проигнорирую их, если они не будут рассмотрены как лучший вариант). Я просто хочу знать, какой инструмент лучше всего подходит для работы (если у вас есть возможность вкручивать винт с помощью Philips или плоской головки, я бы выбрал Philips, если мне не нужно затягивать винт и плоскую головку, если мне нужно затяните винт). Похоже, что если я начну писать утилиты с libdispatch, я не смогу перенести их на другие операционные системы, в которых еще не работает libdispatch ... но это так заманчиво в использовании;)
В нынешнем виде: Я буду использовать libdispatch, когда мне не нужно беспокоиться о переносимости и вызовах POSIX, когда я это сделаю.
Спасибо!