Questions tagged «multithreading»

多线程是计算机或程序通过利用多个并发的执行流(通常称为线程)来并发或异步执行工作的能力。

1
如何从另一个线程调用Flutter Engine方法
我正在为Linux使用Flutter Desktop。我正在调用一个方法MarkTextureFrameAvailable,应该标记要由引擎重新渲染的纹理。由于我正在为视频播放器编程,因此需要MarkTextureFrameAvailable从播放器的线程中进行调用。问题是引擎迫使我MarkTextureFrameAvailable从创建引擎的线程中调用(以及其他任何引擎方法)。 您可以看到所有对引擎的调用最终都在外壳程序中,该外壳程序始终进行检查以查看这些调用是否由创建该调用的同一线程进行: task_runners_.GetPlatformTaskRunner()->RunsTasksOnCurrentThread() ( https://github.com/flutter/engine/blob/master/shell/common/shell.cc#L838) 这就是我创建颤振引擎的方式: int main(int argc, char **argv) { //.. flutter::FlutterWindowController flutter_controller(icu_data_path); // Start the engine. if (!flutter_controller.CreateWindow(800, 600, "Flutter WebRTC Demo", assets_path, arguments)) { return EXIT_FAILURE; } // Register any native plugins. FlutterWebRTCPluginRegisterWithRegistrar( flutter_controller.GetRegistrarForPlugin("FlutterWebRTCPlugin")); // Run until the window is closed. flutter_controller.RunEventLoop(); return EXIT_SUCCESS; } …

3
list :: empty()多线程行为?
我有一个列表,希望不同的线程从中获取元素。为了避免在列表为空时锁定保护该列表的互斥锁,请empty()在锁定之前进行检查。 如果对电话的呼叫在list::empty()100%的时间内都不正确,则可以。我只想避免崩溃或中断并发list::push()和list::pop()调用。 我是否可以肯定地认为VC ++和Gnu GCC有时只会empty()出错并且没有比这更糟的了? if(list.empty() == false){ // unprotected by mutex, okay if incorrect sometimes mutex.lock(); if(list.empty() == false){ // check again while locked to be certain element = list.back(); list.pop_back(); } mutex.unlock(); }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.