学习路线:
这个方向初期比较容易入门一些,掌握一些基本技术,拿起各种现成的工具就可以开黑了。不过,要想从脚本小子变成黑客大神,这个方向越往后,需要学习和掌握的东西就会越来越多以下是网络渗透需要学习的内容:
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
简介
线程安全阻塞队列SafeBlockQueue类,提供阻塞和非阻塞版的入队入队和出队接口,并提供可最追踪任务完成状态的的SafeBlockQueueTracking类。
#include <safe_block_queue.h>
涉及功能
接口说明
OHOS::SafeBlockQueue
OHOS::SafeBlockQueueTracking
class SafeBlockQueueTracking : public SafeBlockQueue
使用示例
- 示例代码(伪代码)
- SafeBlockQueue的示例代码
#include <thread>
#include <functional>
#include <iostream>
#include "../include/safe_block_queue.h"
using namespace OHOS;
using namespace std;
constexpr int SIZE = 10;
class ProductsLine
{
public:
ProductsLine(int maxSize) : que(maxSize) {}
void Produce()
{
for (int i = 0; i < SIZE + 1; i++) {
que.Push(i);
cout << "Add " << i << " to the line" << endl;
}
}
void Consume()
{
for (int i = 0; i < SIZE + 1; i++) {
int out = que.Pop();
cout << "Get " << out << " from the line" << endl;
}
}
int remains()
{
return que.Size();
}
private:
SafeBlockQueue<int> que;
};
int main()
{
ProductsLine line(SIZE);
thread producer(bind(&ProductsLine::Produce, ref(line)));
this_thread::sleep_for(chrono::milliseconds(1));
thread consumer(bind(&ProductsLine::Consume, ref(line)));
this_thread::sleep_for(chrono::milliseconds(1));
producer.join();
consumer.join();
if (line.remains()==0) {
cout << line.remains() << " elements remains in the queue. Synchronizing success." <<endl;
}
}
- SafeBlockQueueTracking的示例代码
#include <thread>
#include <functional>
#include <iostream>
#include "../include/safe_block_queue.h"
using namespace OHOS;
using namespace std;
constexpr int SIZE = 10;
class ProductsLine
{
public:
ProductsLine(int maxSize) : que(maxSize) {}
void Produce()
{
for (int i = 0; i < SIZE + 1; i++) {
que.Push(i);
cout << "Add " << i << " to the line" << endl;
}
}
void Consume()
{
for (int i = 0; i < SIZE + 1; i++) {
int out = que.Pop();
cout << "Get " << out << " from the line" << endl;
que.OneTaskDone();
}
}
void Join()
{
que.Join();
}
int UnfinishTaskNum()
{
return que.GetUnfinishTaskNum();
}
private:
SafeBlockQueueTracking<int> que;
};
int main()
{
ProductsLine line(SIZE);
thread producer(bind(&ProductsLine::Produce, ref(line)));
this_thread::sleep_for(chrono::milliseconds(1));
thread consumer(bind(&ProductsLine::Consume, ref(line)));
this_thread::sleep_for(chrono::milliseconds(1));
line.Join();
producer.join();
consumer.join();
if (line.UnfinishTaskNum()==0) {
cout << line.UnfinishTaskNum() << " elements remains in the queue. Synchronizing success." <<endl;
}
## 写在最后
**在结束之际,我想重申的是,学习并非如攀登险峻高峰,而是如滴水穿石般的持久累积。尤其当我们步入工作岗位之后,持之以恒的学习变得愈发不易,如同在茫茫大海中独自划舟,稍有松懈便可能被巨浪吞噬。然而,对于我们程序员而言,学习是生存之本,是我们在激烈市场竞争中立于不败之地的关键。一旦停止学习,我们便如同逆水行舟,不进则退,终将被时代的洪流所淘汰。因此,不断汲取新知识,不仅是对自己的提升,更是对自己的一份珍贵投资。让我们不断磨砺自己,与时代共同进步,书写属于我们的辉煌篇章。**
需要完整版PDF学习资源私我
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**