我们编程时是否有可用于创建线程的模板 OO语言?
如何为OO语言设计线程包?
答案 0 :(得分:3)
C ++ 0x将支持standard library中的线程。
截至目前,每个平台都有自己的线程实现方式(Windows,POSIX),但您可以使用boost::thread这样的内容,而不必担心特定于平台的问题东西。
在Java中,有一个Thread class。
通常,要将类放入另一个线程,您将在将该类传递给线程时创建一个线程。然后线程将调用该类中的函数。这是一些伪C ++ - 代码:
main()
{
Object myObject;
thread = CreateThread(threadFunction, myObject);
thread.join(); // wait for thread
}
threadFunction(Object theObject)
{
theObject.doSomething();
}
这一切都通过在C ++中使用boost(或C ++ 0x线程)来简化,Java中的Thread类为您处理这个问题。
线程应用程序中的一个大问题是线程同步。这包括race conditions和deadlocks等问题,仅举几个例子。
存在帮助解决这些问题的方法/对象,例如mutex。一个线程可以锁定互斥锁,并且在原始线程释放互斥锁之前,将阻止尝试锁定互斥锁的任何其他线程。
semaphore是一个通用的互斥锁。
Eric的帖子中列出了其他有用的概念。
答案 1 :(得分:2)
每个框架都有自己的处理线程的方法。我建议你在java文档中查找java thread类,然后查看C ++标准头文件中的线程详细信息。
答案 2 :(得分:1)
每种编程语言都有特定的处理线程的方法。
C++ relies a lot on Boost所以你可能想检查那个
基本上,您学习并发的一切都应该适用于您正在使用的操作系统或语言。你必须学会避免大约4个问题
这与您的问题没有直接关系,但这些是您应该在学习特定语言的特定语法的同时学习的科目。 Java当然很容易,而C ++可能有点棘手,你的选择
还有许多用于同步线程的“众所周知的方法”,例如
这个列表一直在继续,但基本上是帮助“对象”或变量来帮助你解决提到的4个问题
答案 3 :(得分:1)
在C / C ++中,线程通常使用函数实现。 (“启动一个新线程并在内部运行此函数,在函数结束时销毁该线程。”)
线程框架通常允许将参数传递给函数。使用线程执行OO的一种方法是将对象指针(“this”)作为函数参数传递,然后在对象上调用特定方法。
答案 4 :(得分:0)
如果您正在使用MFC,那么MFC提供了一些框架帮助程序API来处理多线程。看看这篇文章:Multithreading with C++ and MFC
答案 5 :(得分:0)
在Java中,您可以使用Thread类或Executor接口,您可以向其发送可运行对象。查看java.util.concurrent package。和concurrency trail of the Java Tutorial.祝你好运。
答案 6 :(得分:0)
OOP和多线程编程的主要区别在于,您希望新线程将其启动函数作为对象的(非静态)方法。
现在有一些编程模型:实现“Runnable”接口是最常用的接口。您的类实现了一个标准的“Runnable”接口,该接口具有一个启动方法,该方法通常是一个名为“run”的虚方法。您将启动代码放在该虚方法中,当您需要生成一个线程时,您创建一个线程对象(通常称为Thread),并向您传递一个实现“Runnable”接口的类的对象。然后你调用那个“Thread”对象的“start”方法,这将关注你在类中编写的启动代码将运行一个新线程。在此示例中,“Runnable”和“Thread”均由所选的线程库或您选择的编程语言的标准库/框架提供。另请注意,这两个类的名称可能有所不同。
在多线程编程方面,C ++和Java之间存在很大差异:C ++不支持多线程,而Java则支持多线程。
因此,对于C ++,您需要使用专门的线程库,如Pthreads(http://en.wikipedia.org/wiki/POSIX_Threads)或更多通用库,如Boost,ACE,POCO,它们已经支持线程。建议最少的方法是直接调用操作系统的多线程相关服务。
对于Java,无论您使用的是哪个版本,都将支持内置的多线程编程。