Questions tagged «multithreading»

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

6
std :: unique_lock <std :: mutex>或std :: lock_guard <std :: mutex>?
Наэтотвопросестьответына 堆栈溢出нарусском:Чем的std :: unique_lockотличаетсяот的std :: lock_guard? 我有两个用例。 答:我想通过两个线程同步对队列的访问。 B.我想同步两个线程对队列的访问并使用条件变量,因为一个线程将等待内容被另一个线程存储到队列中。 对于用例AI,请参见使用的代码示例std::lock_guard&lt;&gt;。有关用例BI,请参见使用的代码示例std::unique_lock&lt;&gt;。 两者之间有什么区别?在哪种用例中应该使用哪一种?

8
线程池类似于多处理池?
是否有用于工作线程的Pool类,类似于多处理模块的Pool类? 我喜欢例如并行化地图功能的简单方法 def long_running_func(p): c_func_no_gil(p) p = multiprocessing.Pool(4) xs = p.map(long_running_func, range(100)) 但是,我希望这样做而不会产生新流程的开销。 我知道GIL。但是,在我的用例中,该函数将是IO绑定的C函数,python包装程序将在实际函数调用之前为其释放GIL。 我必须编写自己的线程池吗?

20
如何从python中的线程获取返回值?
foo下面的函数返回一个字符串'foo'。如何获取'foo'从线程目标返回的值? from threading import Thread def foo(bar): print('hello {}'.format(bar)) return 'foo' thread = Thread(target=foo, args=('world!',)) thread.start() return_value = thread.join() 上面显示的“一种显而易见的方法”不起作用:thread.join()return None。

13
调用线程无法访问该对象,因为其他线程拥有它
我的代码如下 public CountryStandards() { InitializeComponent(); try { FillPageControls(); } catch (Exception ex) { MessageBox.Show(ex.Message, "Country Standards", MessageBoxButton.OK, MessageBoxImage.Error); } } /// &lt;summary&gt; /// Fills the page controls. /// &lt;/summary&gt; private void FillPageControls() { popUpProgressBar.IsOpen = true; lblProgress.Content = "Loading. Please wait..."; progress.IsIndeterminate = true; worker = new BackgroundWorker(); worker.DoWork += …




29
将模块“子进程”与超时一起使用
Наэтотвопросестьответына 堆栈溢出нарусском:Прерываниепроцессаизадержканаисполнение 这是运行任意命令以返回其stdout数据或在非零退出代码上引发异常的Python代码: proc = subprocess.Popen( cmd, stderr=subprocess.STDOUT, # Merge stdout and stderr stdout=subprocess.PIPE, shell=True) communicate 用于等待进程退出: stdoutdata, stderrdata = proc.communicate() 该subprocess模块不支持超时-可以杀死运行时间超过X秒的进程-因此,communicate可能需要永远运行。 在打算在Windows和Linux上运行的Python程序中实现超时的最简单方法是什么?


11
从线程获取线程ID
例如,在C#中调试线程时,您可以看到每个线程的ID。 我找不到以编程方式获取相同线程的方法。我什至无法获取当前线程的ID(在的属性中Thread.currentThread)。 因此,我想知道Visual Studio如何获取线程的ID,例如,是否有办法获取ID为的线程的句柄2345?
319 c#  .net  multithreading 

8
如果可以使用同步的(this),为什么还要使用ReentrantLock?
我试图了解是什么使并发锁如此重要,如果可以使用的话synchronized (this)。在下面的虚拟代码中,我可以执行以下任一操作: 同步了整个方法或同步了易受攻击的区域(synchronized(this){...}) 或使用ReentrantLock锁定易受攻击的代码区域。 码: private final ReentrantLock lock = new ReentrantLock(); private static List&lt;Integer&gt; ints; public Integer getResult(String name) { . . . lock.lock(); try { if (ints.size()==3) { ints=null; return -9; } for (int x=0; x&lt;ints.size(); x++) { System.out.println("["+name+"] "+x+"/"+ints.size()+". values &gt;&gt;&gt;&gt;"+ints.get(x)); } } finally { lock.unlock(); } …


5
Java同步关键字的C#版本?
c#是否具有自己的java“ synchronized”关键字版本? 即在Java中,可以将其指定为函数,对象或代码块,如下所示: public synchronized void doImportantStuff() { // dangerous code goes here. } 要么 public void doImportantStuff() { // trivial stuff synchronized(someLock) { // dangerous code goes here. } }

12
多少线程太多?
我正在编写服务器,并且在收到请求时将每个动作发送到一个单独的线程中。我这样做是因为几乎每个请求都会进行数据库查询。我正在使用线程池库来减少线程的构造/销毁。 我的问题是:这样的I / O线程的最佳切入点是什么?我知道这只是一个粗略的估计,但是我们正在讨论数百个吗?几千 我将如何确定这个临界值? 编辑: 谢谢大家的答复,看来我只是必须对其进行测试才能确定我的线程数上限。但问题是:我怎么知道我已经达到那个上限了?我到底应该测量什么?


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.