Потоки

Страницы: 1
RSS
Потоки
 
Несколько вопросов по потокам.

1. В main можно обращаться к методам DataSource?

2. В main можно вызвать функцию getQuoteLevel2()?

3. Полагаю, что запись в файл не синхронизирован между потоками? Как?

 
1) да
2) да
3) ошибаетесь, запись в файлы синхронизирована на уровне ОС.  Но с этим к Майкрософт.  
 
Цитата
nikolz написал:
3) ошибаетесь, запись в файлы синхронизирована на уровне ОС.  Но с этим к Майкрософт.
Но там же должен быть буфер на уровне си библиотеки, ещё до ОС.
 
Пункт 3 важен, если делать запись в лог из коллбаков и из main.
 
Цитата
Constantin написал:
Цитата
nikolz написал:
3) ошибаетесь, запись в файлы синхронизирована на уровне ОС.  Но с этим к Майкрософт.
Но там же должен быть буфер на уровне си библиотеки, ещё до ОС.
зачем? поясните  
 
Цитата
nikolz написал:
зачем? поясните  
Си библиотека буферезует запис в файл, по умолчанию.
 
Цитата
Constantin написал:
Цитата
nikolz написал:
зачем? поясните  
Си библиотека буферезует запис в файл, по умолчанию.
Нет желание заниматься ликбезом.
--------------------
Могу сообщить , что делаю запись в лог
из колбеков,
из main,
и еще из 90 (краш-тест терминала)  потоков
которые выбираются из  пула потоков (максимум 512 потоков)
 и проблем нет  
 
Цитата
nikolz написал:
Могу сообщить , что делаю запись в лог из колбеков, из main,и еще из 90 (краш-тест терминала)  потоковкоторые выбираются из  пула потоков (максимум 512 потоков)  и проблем нет  
Спасибо за информацию.
 
И ещё вопрос: доступ к полям таблицы из разных потоков возможен?

Заранее спасибо за ответ.
 
относительно работы с файлами в потоках.
--------------------
Работа с файлами в Windows реализована на основе механизма memory-mapped files.
---------------------------
Если один экземпляр приложения модифицирует какие-либо глобальные переменные,
размещенные на странице данных, содержимое памяти изменяется для всех  экземпляров этого приложения.
Такое изменение могло бы привести к  катастрофическим последствиям и поэтому недопустимо.
Поэтому ОС предотвращает подобные ситуации, применяя механизм копирования при  записи.
Всякий раз, когда программа пытается записывать что-то в файл,  спроецированный в память,
система перехватывает эту попытку, выделяет новый блок  памяти, копирует в него нужную программе страницу и после этого разрешает запись  в новый блок памяти.
Благодаря этому работа остальных экземпляров программы не  нарушается
 
Цитата
Constantin написал:
И ещё вопрос: доступ к полям таблицы из разных потоков возможен?

Заранее спасибо за ответ.
В документации по QLUA указаны потокобезопасные функции для работы с таблицами:
-----------------------
Одновременная работа с таблицами из функций обратного вызова скрипта и  функции main() может приводить к неопределенным ситуациям.
Для решения этой  проблемы qlua.dll предоставляет потокобезопасные аналоги стандартных функций  Lua.
Выполнение потокобезопасной функции блокирует выполнение кода в другом потоке до окончания работы функции.

Формат вызова потокобезопасной функции совпадает с форматом вызова  аналогичной стандартной функции Lua.

В таблице представлены стандартные функции Lua и соответствующие им  потокобезопасные аналоги:

Стандартная функция LuaПотокобезопасная функция
concat sconcat
remove sremove
insert sinsert
sort ssort

-------------------
Все остальное не безопасно, так как VMLua не разработана для многопоточной работы.  
---------------------
Спасение утопающих -дело рук самих утопающих.
Страницы: 1
Читают тему
Наверх