系统相关
首页 > 系统相关> > Linux小测

Linux小测

作者:互联网

1.在bash中,在一条命令后加入"1>&2"意味着:标准输出重定向到标准错误输出

0 1 2
标准输入 标准输出 标准错误

2.无锁化编程有哪些常见方法?

原子操作是汇编级别支持的指令lock xadd,如c++中的interlockIncrement,java中有AutomicInteger都是对其的封装。简单变量的线程同步用这种方式效率最高。

多个生产者和多个消费者,一样可以做到免锁访问,但要使用原子操作。这里的意思应该是不用原子操作级别的免锁,理由也很简单,生产者和消费者需要修改的位置是分开的(生产者加在尾部,消费者从头部消费),且只有一个读一个写,不会发生冲突。所以只有一点需要关注,就是尾部指针和头部指针每次需要比较以避免生产溢出或者过度消费,而简单变量的读操作都是原子的。

类似的一个概念叫CopyOnWrite,复制一份,修改完后,替换回去时只需替换一个指针或引用,锁住的粒度非常小。但有可能还有线程持有的是旧的指针,因此旧的副本需要延迟释放。

汇编级别支持的指令cmpxchg,锁定内存地址,比较地址中修改前的内容是否与修改时的值一致,如果不一致就说明有其他线程改动,需要重新做。

3.Unix系统下,哪些可以用于进程间通信?

4.题目描述:输入一个整数n(2<=n<=10000),要求输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数,如果没有则输出-1。

输入格式:输入有多组数据。每组一行,输入n。
输出格式:输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数(素数之间用空格隔开,最后一个素数后面没有空格),如果没有则输出-1。
样例输入:
100
样例输出:
11 31 41 61 71

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

vector<int> Vector;

bool isnumber(int number)
{
for(int i=2;i<=sqrt(number);i++){
    if(number%i==0){
        return false;
    }
  }
    return true;
}

int main()
{
    int n;
    while(cin>>n){
        for(int i=2;i<n;i++){
            if(isnumber(i)&&i%10==1){
                Vector.push_back(i);
            }
        }
        if(Vector.size()==0){
            cout<<"-1"<<endl;
        }
        else{
            for(int i=0;i<Vector.size()-1;i++){
                cout<<Vector[i]<<" ";
            }
            cout<<Vector[Vector.size()-1]<<endl;
        }
        Vector.clear();
    }
     return 0;
}

标签:输出,小测,队列,间通信,管道,线程,Linux,进程
来源: https://blog.csdn.net/weixin_43264873/article/details/104861161