per cpu
#include <iostream> #include <utility> #include <thread> #include <chrono> #include <functional> #include <atomic> #include <vector> using namespace std; vector<thread> vthreads; #define RTE_DEFINE_PER_LCORE(type, name) \ __thread __typeof__(type) per_lcore_##name static RTE_DEFINE_PER_LCORE(int, count); #define RTE_PER_LCORE(name) (per_lcore_##name) int n=3; void f1(int n) { RTE_PER_LCORE(count)= 100 + n; std::this_thread::sleep_for(std::chrono::milliseconds(10)); cout << RTE_PER_LCORE(count) << endl; } void f2(int& n) { RTE_PER_LCORE(count)= 90 + n; cout << RTE_PER_LCORE(count) << endl; std::this_thread::sleep_for(std::chrono::milliseconds(10)); } int create_thread() { std::thread t2(f1, n + 1); // pass by value std::thread t3(f2, std::ref(n)); // pass by reference vthreads.push_back(std::move(t2)); vthreads.push_back(std::move(t3)); } int main() { create_thread(); // for(auto it = vthreads.begin(); it != vthreads.end(); ++it) // { // it->join(); // } for ( auto & th :vthreads) { th.join(); } std::cout << "Final value of n is " << n << '\n'; return 0; }
root@ubuntu:~/c++# g++ -std=c++11 -pthread per2.cpp -o per2 root@ubuntu:~/c++# ./per2 93 104 Final value of n is 3
#include <iostream> #include <utility> #include <thread> #include <chrono> #include <functional> #include <atomic> #include <vector> using namespace std; vector<thread> vthreads; #define RTE_DEFINE_PER_LCORE(type, name) \ __thread __typeof__(type) per_lcore_##name static RTE_DEFINE_PER_LCORE(int, count); #define RTE_PER_LCORE(name) (per_lcore_##name) int n=3; void f1(int n) { RTE_PER_LCORE(count)= 100 + n; std::this_thread::sleep_for(std::chrono::milliseconds(10)); cout << RTE_PER_LCORE(count) << endl; } void f2(int& n) { RTE_PER_LCORE(count)= 90 + n; std::this_thread::sleep_for(std::chrono::milliseconds(10)); cout << RTE_PER_LCORE(count) << endl; } int create_thread() { std::thread t2(f1, n + 1); // pass by value std::thread t3(f2, std::ref(n)); // pass by reference vthreads.push_back(std::move(t2)); vthreads.push_back(std::move(t3)); } int main() { create_thread(); // for(auto it = vthreads.begin(); it != vthreads.end(); ++it) // { // it->join(); // } for ( auto & th :vthreads) { th.join(); } std::cout << "Final value of n is " << n << '\n'; return 0; }
root@ubuntu:~/c++# g++ -std=c++11 -pthread per2.cpp -o per2 root@ubuntu:~/c++# ./per2 104 93 Final value of n is 3
#include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <time.h> #include <unistd.h> __thread int var = 8; void *func0(void *arg){ ++var; printf("func0:%d\n", var); } void *func1(void *arg){ usleep(3); ++var; printf("func1:%d\n", var); } int main(){ pthread_t p0, p1; int i=0; pthread_create(&p0, NULL, func0, NULL); pthread_create(&p1, NULL, func1, NULL); pthread_join(p0, NULL); pthread_join(p1, NULL); return 0; }
root@ubuntu:~/dpdk-function# g++ -pthread -o thread thread.c root@ubuntu:~/dpdk-function# ./thread func0:9 func1:9