memfam
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Цитата: Спорно на счет дешевле... + : 1. это предпочтительно для очень "маленьких" данных 2. Надо учить заказчика пользоваться этим... | Дешевле - наверняка, потому что используется тот же file mapping, но на уровне загрузчика - т.е. средствами ядра. Да и кода писать нужно меньше, и проверять код возврата не надо. Единственный минус - межпользовательский sharing не получится, но если у тебя не сервер, то межпользовательский sharing может требоваться только между сервисами или сервис-аппликация, а это явно не твой случай. 1. Насчет маленьких данных - в расшаренную секцию можно поместить сколько угодно переменных, массивов и т.п. Правда, надо чтобы они были инициализированные. 2. Ну, если надо, так надо. Зачем, кстати если не секрет? Ж-) Разве заказчику не все равно, лишь бы работало? В любом случае, как именно расшарить данные, это независимый вопрос, и на синхронизацию он не влияетю Цитата: ...время и значение не поместятся... | А вот это и правда хуже. Но выбор между busy-loop и средствами системы все равно придется делать. Я бы сказал, что если только данные не идут непрерывным потоком, лучше использовать системную синхронизацию, иначе один из процессов может не получить достаточно времени и выпасть из синхронизации. Если же данные действительно нужны все время, надо позаботиться о равном приоритете обоих либо использовать двухпроцессорную машину. Сама же синхронизация через busy-loop - штука стандартная: Определяем буфер и семафор в общей памяти (CreateFileMapping тоже подойдет): volatile char Buffer[.....]; volatile LONG Sema = 0; Пишущий процесс: for(;;) { if (Sema == 0) { // Сгенерировать и занести данные в буффер InterlockedIncrement (&Sema); } } Читающий процесс: for(;;) { if (Sema > 0) { // Забрать данные и обработать InterlockedDecrement (&Sema); } } |