多个线程公用函数体

#include<iostream>
using namespace std;
#include<windows.h>

DWORD  WINAPI ThreadProc(LPVOID lpParam)
{

    int* piThreadNum = reinterpret_cast<int*>(lpParam);
    cout<<"start"<<endl;
    char* pszThread0 ="0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
    char* pszThread1 ="11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111";
    char* pszThread2 ="22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222";
    char* pszThread3 ="3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333";
    char* pszThread4 ="4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444";
    char* pszThread5 ="5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555";
    char* pszThread6 ="66666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666";
    char* pszThread7 ="77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777";
    char* pszThread8 ="88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888";
    char* pszThread9 ="999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999";
    while(true)
    {
        switch(*piThreadNum)
        {
        case 0:
            cout<<pszThread0<<endl;
            break;
        case 1:
            cout<<pszThread1<<endl;
            break;
        case 2:
            cout<<pszThread2<<endl;
            break;
        case 3:
            cout<<pszThread3<<endl;
            break;
        case 4:
            cout<<pszThread4<<endl;
            break;
        case 5:
            cout<<pszThread5<<endl;
            break;
        case 6:
            cout<<pszThread6<<endl;
            break;
        case 7:
            cout<<pszThread7<<endl;
            break;
        case 8:
            cout<<pszThread8<<endl;
            break;
        case 9:
            cout<<pszThread9<<endl;
            break;
        default:
            cout<<*piThreadNum<<endl;
            break;

        }       
    }    
}    

int main()
{

    HANDLE hThread[10];
    DWORD dwPid[10];
    int aiThreadNum[10];
    for(int i =0;i<10;i++)
    {
        aiThreadNum[i] = i;
        hThread[i] = CreateThread(NULL,0,ThreadProc,&aiThreadNum[i],0,&dwPid[i]);
    }  
    system("pause"); 
    return 0;
}    

多线程访问同一个函数为什么要互斥呢?如果函数是可重入的,就没有这样的问题,随便你怎样访问,每次都会是不同的堆栈来处理这个函数调用吧。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的飞机售票的模拟实现: ```python import threading # 全局变量 sold_tickets = 0 total_tickets = 100 lock = threading.Lock() # 定义售票函数 def sell_tickets(): global sold_tickets global total_tickets while True: # 上锁 lock.acquire() if total_tickets > 0: # 还有票可售 sold_tickets += 1 total_tickets -= 1 print("售票线程%s售出第%s张票,剩余票数%s" % (threading.current_thread().name, sold_tickets, total_tickets)) else: # 没有票可售 print("售票线程%s售票结束,共售出%s张票" % (threading.current_thread().name, sold_tickets)) # 释放锁 lock.release() break # 释放锁 lock.release() # 创建售票线程 threads = [] for i in range(5): t = threading.Thread(target=sell_tickets, name="Thread-%s" % (i+1)) threads.append(t) # 启动售票线程 for t in threads: t.start() # 等待售票线程结束 for t in threads: t.join() # 打印售票总数 print("所有售票线程结束,共售出%s张票" % sold_tickets) ``` 在这个模拟实现中,我们首先定义了全局变量 `sold_tickets` 和 `total_tickets`,分别表示已售票数和总票数。我们使用了 `threading.Lock()` 创建了一个互斥锁 `lock`,在售票函数中使用 `lock.acquire()` 上锁,在操作全局变量时使用 `lock.release()` 释放锁,确保多个线程同时访问全局变量时的线程安全。 接着,我们创建了 5 个售票线程,并启动了这些线程。每个售票线程都会不断地尝试售出一张票,直到所有票都售完为止。在售票线程结束后,我们使用 `thread.join()` 等待线程结束,并打印售票总数。 当然,这只是一个简单的模拟实现,实际的飞机售票系统要考虑更多的因素,例如如何处理多个用户同时购买同一张票等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值