线程共享全局变量(.data和.bbs)

线程默认共享数据段、代码段等地址空间,常用的是全局变量。而进程不共享全局变量,只能借助mmap。

//代码示例

#include <string.h>
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>int var = 100;void *tfn(void *arg)
{var = 200;printf("In thread, the var is %d.\n",var);return NULL;
}int main(void)
{pthread_t tid;int ret;printf("In main, the var is %d at first.\n",var);ret = pthread_create(&tid, NULL, tfn, NULL);if( ret != 0 )   //出错判断{fprintf(stderr,"pthread_create error: %s\n",strerror(ret));exit(1);}sleep(1);printf("In main, the var is %d after thread's ending.\n",var);return 0;
}

[root@localhost 01_pthread_test]# ./pthrd_crt

In main, the var is 100 at first.

In thread, the var is 200.

In main, the var is 200 after thread's ending.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/385298.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1008 数组元素循环右移问题 (20)

一个数组A中存有N&#xff08;N&gt0&#xff09;个整数&#xff0c;在不允许使用另外数组的前提下&#xff0c;将每个整数循环向右移M&#xff08;M>0&#xff09;个位置&#xff0c;即将A中的数据由&#xff08;A~0~ A~1~……A~N-1~&#xff09;变换为&#xff08;A~N-…

C++设计模式之策略模式(Strategy)

Strategy策略模式作用&#xff1a;定义了算法家族&#xff0c;分别封装起来&#xff0c;让他们之间可以互相替换&#xff0c;此模式让算法的变化&#xff0c;不会影响到使用算法的客户。 UML图&#xff1a; 代码实现 #include <iostream> using namespace std;class St…

pthread_exit函数

void pthread_exit(void *retval); 参数&#xff1a;retval表示线程退出状态&#xff0c;通常传NULL。 作用&#xff1a;将单个线程退出。 注意几点&#xff1a; return的作用是返回到函数的调用点&#xff0c;如果是main函数中的return&#xff0c;则代表该进程结束&#x…

C++面试常见问题

背景色yellow 1 1. c如何防止一个类被其他类继承 >- 如果是仅仅为了达到这个目的可以直接把这个类的构造函数设置成私有的&#xff0c;这样就杜绝了其他类的继承。也相当于毁掉了这个类&#xff08;无法再创造出自己的对象&#xff09;。 那么怎么样既要保证这个类的完整性…

pthread_join函数

int pthread_join(pthread_t thread, void **retval); 作用&#xff1a;阻塞等待线程退出&#xff0c;获取线程退出状态。其作用对应进程中 waitpid() 函数。 成功&#xff1a;0&#xff1b;失败&#xff1a;错误号 strerror函数 参数&#xff1a;thread&#xff1a;线程I…

【C++ Priemr | 15】派生类向基类转换的可访问性

1. 只有当D公有继承B时&#xff0c;用户代码才能使用派生类向基类的转换&#xff1b;如果D私有继承B的方式是受保护的或者私有的&#xff0c;则用户代码不能使用该转换。 class A {}&#xff1b; class B : public A {}void function(const A&) {}int main() {B b;functio…

pthread_detach函数

int pthread_detach(pthread_t thread); 成功&#xff1a;0&#xff1b;失败&#xff1a;错误号 作用&#xff1a;从状态上实现线程分离&#xff0c;注意不是指该线程独自占用地址空间。 线程分离状态&#xff1a;指定该状态&#xff0c;线程主动与主控线程断开关系。线程…

【C++ Primer | 15】面试问题

在成员函数中调用虚函数 #include <iostream> using namespace std; class CBase { public:void func1(){func2();}virtual void func2() {cout << "CBase::func2()" << endl;} }; class CDerived:public CBase { public:virtual void func2() {…

pthread_cancel、pthread_equal函数

&#xff08;1&#xff09;pthread_cancel函数 int pthread_cancel(pthread_t thread); 成功&#xff1a;0&#xff1b;失败&#xff1a;错误号 作用&#xff1a;杀死(取消)线程&#xff0c;其作用对应进程中 kill() 函数。 注意&#xff1a;线程的取消并不是实时的&…

STL源码剖析面试问题

当vector的内存用完了&#xff0c;它是如何动态扩展内存的&#xff1f;它是怎么释放内存的&#xff1f;用clear可以释放掉内存吗&#xff1f;是不是线程安全的&#xff1f; vector内存用完了&#xff0c;会以当前size大小重新申请2* size的内存&#xff0c;然后把原来的元素复制…

线程与进程的控制原语对比

线程与进程的控制原语对比 fork pthead_create exit( int ) pthead_exit(void *); wait(int *) pthread_join&#xff08; ,void **&#xff09; 阻塞 ;分离 22 &#xff1b;cancel -1 kill() pthread_cancel(); 取消点(检查点)&#xff1a;系统调用 getpid() pthrea…

ptmalloc堆内存管理机制(主要讨论Linux x86下32位系统)

bin&#xff08;chunk容器&#xff09; ptmalloc将相似大小的 chunk 用双向链表链接起来&#xff0c;这样的一个链表被称为一个 bin。 Ptmalloc 一共维护了 128 个 bin&#xff0c;并使用一个数组来存储这些 bin&#xff0c;这个数组被成为bin数组。 bin数组结构如下&#xf…

线程属性的修改

&#xff08;1&#xff09;线程属性 Linux下线程的属性是可以根据实际项目需要&#xff0c;进行设置&#xff0c;之前我们讨论的线程都是采用线程的默认属性&#xff0c;默认属性已经可以解决绝大多数开发时遇到的问题。如我们对程序的性能提出更高的要求那么需要设置线程属性…

NPTL(Native POSIX Thread Library)

1.NPTL&#xff08;Native POSIX Thread Library&#xff09;为POSIX标准线程库&#xff0c;查看当前Linux系统的pthread库&#xff08;线程库&#xff09;版本的命令为&#xff1a;getconf GNU_LIBPTHREAD_VERSION。 [rootlocalhost 01_pthread_test]# getconf GNU_LIBPTHREA…

线程使用注意事项

1.主线程退出其他线程不退出&#xff0c;主线程应调用pthread_exit&#xff1b; 2.避免僵尸线程&#xff1a;pthread_join、pthread_detach、pthread_create指定分离属性。被join线程可能在join函数返回前就释放完自己的所有内存资源&#xff0c;所以不应当返回被回收线程栈中…

线程同步的概念

所谓同步&#xff0c;即同时起步&#xff0c;协调一致。不同的对象&#xff0c;对“同步”的理解方式略有不同。如&#xff0c;设备同步&#xff0c;是指在两个设备之间规定一个共同的时间参考&#xff1b;数据库同步&#xff0c;是指让两个或多个数据库内容保持一致&#xff0…

互斥量(mutex)

Linux中提供一把互斥锁mutex&#xff08;也称之为互斥量&#xff09;。每个线程在对资源操作前都尝试先加锁&#xff0c;成功加锁才能操作&#xff0c;操作结束解锁。资源还是共享的&#xff0c;线程间也还是竞争的&#xff0c;但通过“锁”就将资源的访问变成互斥操作&#xf…

洗牌算法

参考资料&#xff1a; 1. 洗牌算法汇总以及测试洗牌程序的正确性 2. 三种洗牌算法shuffle

Bloom Filter算法

一、概念 Bloom Filter的中文翻译叫做布隆过滤器&#xff0c;是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法&#xff0c;缺点是有一定的误…

237. 删除链表中的节点

请编写一个函数&#xff0c;使其可以删除某个链表中给定的&#xff08;非末尾&#xff09;节点&#xff0c;你将只被给定要求被删除的节点。 现有一个链表 -- head [4,5,1,9]&#xff0c;它可以表示为: 示例 1: 输入: head [4,5,1,9], node 5 输出: [4,1,9] 解释: 给定你链表…