Запитання з тегом «thread-safety»

Частина коду є безпечною для потоків, якщо вона лише маніпулює структурами даних таким чином, що дозволяє послідовно виконувати цей код декількома потоками. Код може бути безпечним для потоку, умовно безпечним (необхідне взаємне виключення) або небезпечним (може бути безпечно використаний лише одним потоком).

3
Threadsafe проти повторного вступу
Нещодавно я задав запитання із заголовком "Чи безпечна нитка malloc?" , і всередині цього я запитав: "Malloc є повторним учасником?" У мене склалося враження, що всі учасники, які повторно вступають, захищені від потоків. Чи є це припущення помилковим?

3
замок (новий об'єкт ()) - культ вантажу чи якийсь божевільний "мовний особливий випадок"?
Я переглядаю якийсь код, написаний консультантом, і хоча десятки червоних прапорів уже з’явилися, я не можу обернути голову навколо такого фрагмента: private void foo() { if (InvokeRequired) { lock (new object()) { if (m_bar!= null) Invoke(new fooDelegate(foo), new object[] { }); } } else { if(OnBazChanged != null) OnBazChanged(); } …

4
Чи є HashMap потокобезпечним для різних ключів?
Якщо у мене є два декілька потоків, які отримують доступ до HashMap, але я гарантую, що вони ніколи не матимуть одночасного доступу до одного і того ж ключа, чи може це все одно призвести до стану перегони?


4
Безпека використання поточного потоку [] в рейках
Я постійно отримую суперечливі думки щодо практики зберігання інформації в Thread.currentхеші (наприклад, поточний_користувач, поточний субдомен тощо). Ця техніка була запропонована як спосіб спрощення подальшої обробки в межах рівня моделі (масштабування запитів, аудит тощо). Чому мої змінні потоків перериваються в Rails? Альтернатива використанню Thread.current в обгортці API для Rails Чи безпечні …

14
Android - найкращий і безпечний спосіб зупинити нитку
Я хочу знати, який найкращий спосіб зупинити нитку в Android. Я знаю, що можу використовувати AsyncTaskзамість нього, і що існує cancel()метод. Я повинен використовувати Threads у своїй ситуації. Ось як я використовую Thread: Runnable runnable = new Runnable() { @Override public void run() { //doing some work } }; new …

9
ефективний потокобезпечний синглтон в C ++
Звичайний шаблон для синглтон-класу - це щось на зразок static Foo &getInst() { static Foo *inst = NULL; if(inst == NULL) inst = new Foo(...); return *inst; } Однак я розумію, що це рішення не є безпечним для потоку, оскільки 1) конструктор Foo може бути викликаний більше одного разу (що …

3
Як створити завдання (TPL) із запуском потоку STA?
Використання Thread досить просто Thread thread = new Thread(MethodWhichRequiresSTA); thread.SetApartmentState(ApartmentState.STA); Як виконати те саме за допомогою Завдань у програмі WPF? Ось деякий код: Task.Factory.StartNew ( () => {return "some Text";} ) .ContinueWith(r => AddControlsToGrid(r.Result)); Я отримую InvalidOperationException з Викликаючий потік повинен бути STA, оскільки багато компонентів інтерфейсу вимагають цього.

3
Програма багатопотокової роботи застрягла в оптимізованому режимі, але працює нормально в -00
Я написав прості багатопотокові програми так: static bool finished = false; int func() { size_t i = 0; while (!finished) ++i; return i; } int main() { auto result=std::async(std::launch::async, func); std::this_thread::sleep_for(std::chrono::seconds(1)); finished=true; std::cout<<"result ="<<result.get(); std::cout<<"\nmain thread id="<<std::this_thread::get_id()<<std::endl; } Він поводиться нормально в режимі налагодження у Visual studio або -O0в gc …

3
Чи гарантує "непостійний" взагалі що-небудь в портативному коді С для багатоядерних систем?
Після дивлячись на купу з інших питань і їх відповідей , я отримую враження , що не існує ніякого широко поширеного угоди про те , що «летючий» ключове слово в C означає точно. Навіть сам стандарт не здається достатньо зрозумілим, щоб усі могли погодитися, що це означає . Серед інших …

2
Скопіюйте конструктор з аргументом non-const, запропонованим правилами безпеки потоку?
У мене є обгортка для якогось фрагмента спадкового коду. class A{ L* impl_; // the legacy object has to be in the heap, could be also unique_ptr A(A const&) = delete; L* duplicate(){L* ret; legacy_duplicate(impl_, &L); return ret;} ... // proper resource management here }; У цьому застарілому коді функція, …
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.