C++¶
Posix多线程¶
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <vector>
using std::vector;
void* Proc(void* arg)
{
    pthread_t pthread = *(pthread_t *)arg;
    printf("this is thread %ld\n", pthread);
}
int main(int argc, char** argv)
{
    if (argc != 2)
    {
        printf("usage:%s thread_num", argv[0]);
        return 1;
    }
    int thread_num = atoi(argv[1]);
    vector<pthread_t> threads(thread_num);
    for (int i = 0; i < thread_num; ++i)
    {
        pthread_t pthread;
        pthread_create(&pthread, NULL, &Proc, &threads[i]);
        threads[i] = pthread;
    }
    for (vector<pthread_t>::iterator it = threads.begin(); it != threads.end(); ++it)
    {
        pthread_join(*it, NULL);
    }
    return 0;
}
boost多线程¶
- 
全局函数作为线程函数 #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <vector> #include <string> #include <boost/thread.hpp> using std::vector; using std::string; void Proc(int num, const string& str) { printf("this is thread %d, say %s\n", num, str.c_str()); } int main(int argc, char** argv) { if (argc != 2) { printf("usage:%s thread_num", argv[0]); return 1; } int thread_num = atoi(argv[1]); vector<boost::thread*> threads; for (int i = 0; i < thread_num; ++i) { boost::thread* thread = new boost::thread(&Proc, i, "Hello World!"); threads.push_back(thread); } for (vector<boost::thread*>::iterator it = threads.begin(); it != threads.end(); ++it) { (*it)->join(); } return 0; } 
- 
类成员函数作为线程函数 #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <vector> #include <string> #include <boost/thread.hpp> #include <boost/bind.hpp> using std::vector; using std::string; class Test { public: void Proc(int num, const string& str) { printf("this is thread %d, say %s\n", num, str.c_str()); } }; int main(int argc, char** argv) { if (argc != 2) { printf("usage:%s thread_num", argv[0]); return 1; } int thread_num = atoi(argv[1]); vector<boost::thread*> threads; for (int i = 0; i < thread_num; ++i) { Test* test = new Test(); boost::thread* thread = new boost::thread(boost::bind(&Test::Proc, test, i, "Hello World!")); threads.push_back(thread); } for (vector<boost::thread*>::iterator it = threads.begin(); it != threads.end(); ++it) { (*it)->join(); } return 0; } 
Python¶
使用threading模块¶
import sys
import threading
def proc(num, str):
    print 'this is thread %d, say %s' % (num, str)
def start_threads(thread_num):
    threads = []
    for i in range(thread_num):
        thread = threading.Thread(target=proc, args=(i, "Hello World!"))
        threads.append(thread)
        thread.start()
    for thread in threads:
        thread.join()
if __name__ == '__main__':
    if len(sys.argv) != 2:
        print "usage:%s thread_num" % sys.argv[0]
        sys.exit(1)
    start_threads(int(sys.argv[1]))
使用multiprocessing模块¶
import sys
from multiprocessing.dummy import Pool as ThreadPool
def proc(arg):
    num, str = arg
    print 'this is thread %d, say %s' % (num, str)
def start_threads(thread_num):
    pool = ThreadPool(thread_num)
    args = [(i, "Hello World!") for i in range(thread_num)]
    pool.map(proc, args)
    pool.close()
    pool.join()
if __name__ == '__main__':
    if len(sys.argv) != 2:
        print "usage:%s thread_num" % sys.argv[0]
        sys.exit(1)
    start_threads(int(sys.argv[1]))