c++多线程编程?boost多线程编程
这篇文章给大家聊聊关于c++多线程编程,以及boost多线程编程对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。
关于C++多线程编程教学
在Windows NT和Windows 9x中,多线程的编程实现需要调用一系列的API函数,如CreateThread、ResumeThread等,比较麻烦而且容易出错。我们使用Inprise公司的新一代RAD开发工具C++Builder,可以方便地实现多线程的编程。与老牌RAD工具Visual Basic和Delphi比,C++Builer不仅功能非常强大,而且它的编程语言是C++,对于系统开发语言是C的Windows系列操作系统,它具有其它编程语言无可比拟的优势。利用C++Builder提供的TThread对象,多线程的编程变得非常简便易用。那么,如何实现呢?且待我慢慢道来,让你体会一下多线程的强大功能。
1.创建多线程程序:
首先,先介绍一下实现多线程的具体步骤。在C++Builder中虽然用Tthread对象说明了线程的概念,但是Tthread对象本身并不完整,需要在TThread下新建其子类,并重载Execute方法来使用线程对象。在C++Builder下可以很方便地实现这一点。
在C++Builder IDE环境下选择菜单File|New,在New栏中选中Thread Object,按OK,接下来弹出输入框,输入TThread对象子类的名字MyThread,这样C++Builder自动为你创建了一个名为TMyThread的TThread子类。同时编辑器中多了一个名为Unit2.cpp的单元,这就是我们创建的TMyThread子类的原码,如下:
#include
#pragma hdrstop
#include“Unit2.h”
#pragma package(smart_init)
//---------------------
// Important: Methods and properties of objects in VCL can only be
// used in a method called using Synchronize, for example:
//
// Synchronize(UpdateCaption);
//
// where UpdateCaption could look like:
//
// void __fastcall MyThread::UpdateCaption()
//{
// Form1->Caption=“Updated in a thread”;
//}
//--------------------
__fastcall MyThread::MyThread(bool CreateSuspended)
: TThread(CreateSuspended)
{
}
//--------------------
void __fastcall MyThread::Execute()
{
//---- Place thread code here----
}
//---------------------
其中的Execute()函数就是我们要在线程中实现的任务的代码所在处。在原代码中包含Unit2.cpp,这个由我们创建的TMyThread对象就可以使用了。使用时,动态创建一个TMyThread对象,在构造函数中使用Resume()方法,那么程序中就增加了一个新的我们自己定义的线程TMyThread,具体执行的代码就是Execute()方法重载的代码。要加载更多的线程,没关系,只要继续创建需要数量的TMyThread对象就成。
C++多线程编程问题
多线程工作可以提高解决问题的速度
你举得例子可以多线程实现,但是更多的人称之为分布式计算
多线程主要是创建多个线程,每个线程负责自己的事情,每个线程只对主线程负责
至于解决问题的速度应该可以达到提高一半,但是你要注意资源的互斥,互斥处理不好估计会事倍功半
求JAVA多线程编程代码
测试过了,没问题。基本思路,实例化一个桥类,谁得到桥的可用标志谁过桥。
我第一个看到这个100分的,说实话,知道你是个学生要代码而已,线程类好久没练手了,练习一下而已,否则真不会给你写代码。因为我读书的时候也发过类似的求助,知道什么感受。不懂的时候真的没办法,所以告诉你思路。
package cn.thread;
public class Through_out_bridge{
public static void main(String[] args){
Bridge b= Bridge.getInstance();//实例化桥
//实例化左端9个人,此时所有人都不能过桥,桥的可以状态标志为不可以用
for(int i= 1; i<= 9; i++){
Thread t= new Thread(new Person(false, i, b));
t.start();
}
//实例化右端12个人,此时所有人都不能过桥,桥的可以状态标志为不可以用
for( int i=1;i<=12;i++)
{
Thread t= new Thread(new Person(true,i,b));
t.start();
}
//桥的可用状态给左端第10个人,可以自定义给谁
b.state= true;
Thread t= new Thread(new Person(false, 10, b));
}
}
class Person implements Runnable{
public Bridge bridge;//桥
private String hand;//在桥哪一端
int No;//序号
public Person(boolean side, int i, Bridge bridge){
this.No= i;
this.bridge= bridge;
if(bridge.state)
{
System.out.println(i+"已经过桥。");
}
if(side){
this.hand= new String("右");
} else{
this.hand= new String("左");
}
}
//过桥方法
public synchronized void through() throws InterruptedException{
if(bridge.state){
System.out.println(hand+"边第"+No+"在过桥");
bridge.open( No);
} else{
bridge.lock(No);
}
}
public void run(){
try{
Thread.sleep(1000);
// System.out.println(No+hand+"边已经过桥!");
through();
} catch(InterruptedException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class Bridge{
//可用状态判断true:可用
public boolean state= false;
//自行实例化
public static Bridge getInstance(){
return new Bridge();
}
public synchronized void open(int i) throws InterruptedException{
if(state){
Thread.sleep(1000);
this.state=true;
notify();
}
}
public synchronized void lock(int i) throws InterruptedException{
if(!state){
this.state=false;
System.out.println(i+"在等待.");
wait();
}
}
}
文章到此结束,如果本次分享的c++多线程编程和boost多线程编程的问题解决了您的问题,那么我们由衷的感到高兴!