Questions tagged «multithreading»

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

3
Python中的后台功能
我有一个Python脚本,有时会向用户显示图像。这些图像有时可能很大,并且经常重复使用。显示它们并不重要,但是显示与它们关联的消息是至关重要的。我有一个功能,可以下载所需的图像并将其保存在本地。现在,它与向用户显示消息的代码内联运行,但是对于非本地图像,有时可能需要10秒钟以上。有没有一种方法可以在需要时调用此函数,但是在代码继续执行的同时在后台运行?我只会使用默认图像,直到正确的图像可用为止。


5
在Linux下的GCC中使用std :: thread的正确链接选项是什么?
嗨,我正在尝试std::thread与G ++一起使用。这是我的测试代码 #include <thread> #include <iostream> int main(int, char **){ std::thread tt([](){ std::cout<<"Thread!"<<std::endl; }); tt.join(); } 它可以编译,但是当我尝试运行它时,结果是: terminate called after throwing an instance of 'std::system_error' what(): Operation not permitted Aborted 我的编译器版本: $ g++ --version g++ (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1 Copyright (C) 2011 Free Software Foundation, Inc. This is free software; see …


8
如果不是,谁在调用Java Thread interrupt()方法?
我已经阅读并重新阅读了Java Concurrency in Practice,已经阅读了有关该主题的多个线程,已经阅读了IBM文章Dealing with InterruptedException,但是我根本不了解某些我认为可以打破的东西。分为两个问题: 如果我从来没有自己打过其他线程,什么会触发InterruptedException? 如果我从不使用自己的interrupt()中断其他线程(例如,因为我正在使用其他方式取消工作线程,例如毒药和while(!cancelled)样式循环[如在JCIP中所述),那那么InterruptedException是什么意思?抓到我该怎么办?关闭我的应用程序?

6
无锁多线程是真正的线程专家
我正在阅读乔恩·斯凯特(Jon Skeet)对一个问题的回答,他在讲话中提到了这一点: 就我而言,无锁多线程是针对真正的线程专家的,我不是其中之一。 这不是我第一次听到此消息,但是如果您有兴趣学习如何编写无锁多线程代码,那么我发现很少有人谈论您的实际操作方式。 因此,我的问题除了学习关于线程的所有知识外,还从其他地方开始尝试专门编写无锁的多线程代码,以及哪些是很好的资源。 干杯

2
犰狳solve()线程安全吗?
在我的代码中,我有一个循环,在该循环中构造并确定了线性系统并尝试解决该问题: #pragma omp parallel for for (int i = 0; i < n[0]+1; i++) { for (int j = 0; j < n[1]+1; j++) { for (int k = 0; k < n[2]+1; k++) { arma::mat A(max_points, 2); arma::mat y(max_points, 1); // initialize A and y arma::vec solution = solve(A,y); …

6
ThreadLocal变量的性能
从ThreadLocal变量读取的速度比从常规字段读取的速度慢多少? 更具体地说,简单对象创建比访问ThreadLocal变量快还是慢? 我认为它足够快,因此ThreadLocal<MessageDigest>与MessageDigest每次创建实例相比,拥有实例要快得多。但这是否也适用于字节[10]或字节[1000]? 编辑:问题是调用ThreadLocalget时真正发生了什么?如果那只是一个领域,就像其他领域一样,那么答案将是“它总是最快的”,对吗?


6
Java中的对象监视器是什么意思?为什么用这个词?
在阅读有关Java线程的文章时,我经常注意到这样的表达:“当前线程是该对象的监视器的所有者”。我的意思是:线程有权在对象上进行操作。但是我很困惑,为什么我们使用“对象的监视器”而不是“对象的锁”? 简而言之,我不知道“监视”一词的含义。这个问题可能很奇怪而且很简单。但我希望任何人都可以帮助解决它。3ks

5
了解C ++ 11中的std :: atomic :: compare_exchange_weak()
bool compare_exchange_weak (T& expected, T val, ..); compare_exchange_weak()是C ++ 11中提供的比较交换原语之一。即使对象的值等于,它也返回false,这是弱的expected。这是由于在某些平台上使用了一系列指令(而不是x86上的指令)来实现它的虚假故障所致。在这样的平台上,上下文切换,另一个线程重新加载相同的地址(或缓存行)等可能会使原语失败。这是spurious因为它不是所述对象(不等于的值expected失败的操作)。相反,这是一种时间问题。 但令我感到困惑的是C ++ 11标准(ISO / IEC 14882)中所说的内容, 29.6.5 ..伪失败的后果是几乎所有弱比较和交换的使用都将循环。 为什么几乎在所有用途中它都必须处于循环状态?这是否意味着我们会在由于虚假故障而失败时循环?如果是这样,为什么我们还要compare_exchange_weak()自己动手使用和编写循环?我们可以使用compare_exchange_strong()我认为应该为我们消除虚假故障的方法。常见的用例是compare_exchange_weak()什么? 另一个问题有关。安东尼在他的《行动中的C ++并发性》一书中说: //Because compare_exchange_weak() can fail spuriously, it must typically //be used in a loop: bool expected=false; extern atomic<bool> b; // set somewhere else while(!b.compare_exchange_weak(expected,true) && !expected); //In this case, you …

4
是否收集Java线程垃圾
该问题已发布在某个网站上。我在这里找不到正确的答案,因此我将其再次发布在这里。 public class TestThread { public static void main(String[] s) { // anonymous class extends Thread Thread t = new Thread() { public void run() { // infinite loop while (true) { try { Thread.sleep(1000); } catch (InterruptedException e) { } // as long as this line printed out, you …


10
我可以使用线程在IIS上执行长时间运行的作业吗?
在ASP.Net应用程序中,用户单击网页上的按钮,然后通过事件处理程序在服务器上实例化对象,并在该对象上调用方法。该方法由外部系统处理,这可能需要一段时间。因此,我想做的是在另一个线程中运行该方法调用,以便我可以通过“您的请求已提交”将控制权返回给用户。我很乐意以“一劳永逸”的方式完成此操作,尽管如果用户可以继续轮询对象的状态会更好。 我不知道的是,即使用户会话已过期,IIS是否仍允许我的线程继续运行。想象一下,用户触发事件,我们实例化服务器上​​的对象,并在新线程中触发该方法。用户对“您的请求已提交”消息感到满意,并关闭其浏览器。最终,此用户会话将在IIS上超时,但该线程可能仍在运行,正在工作。IIS将允许线程继续运行,还是在用户会话期满后将其杀死并处理该对象? 编辑:从答案和评论中,我了解做到这一点的最佳方法是将长时间运行的处理移到IIS之外。除了其他方面,这还涉及appdomain回收问题。在实践中,我需要在有限的时间内发布版本1,并且必须在现有的框架内工作,因此想避免使用服务层,因此希望只在IIS内部启动线程。实际上,这里的“长时间运行”仅需几分钟,并且网站上的并发性较低,因此应该可以。但是,下一版本肯定需要拆分为单独的服务层。

7
线程如何在Python中工作,以及特定于Python线程的常见陷阱是什么?
我一直在努力地思考线程在Python中的工作方式,而且很难找到有关它们如何运行的良好信息。我可能只是缺少链接之类的东西,但似乎官方文档对该主题的了解不是很全面,而且我也找不到很好的文章。 据我所知,一次只能运行一个线程,活动线程每10条指令左右切换一次? 哪里有很好的解释,或者您可以提供一个解释?知道在Python中使用线程时遇到的常见问题也将非常高兴。

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.