链接取数/条件存数

原子交换原语:将寄存器中的一个值和存储器中的一个值相互交换。

采用指令对的方法实现单个的原子存储器操作。这一指令对包括链接取数指令和条件存数指令。

链接取数指令:返回锁单元的原始值。

示例:

ll $s1,20($s2)     含义:$s1=Memory[$s2+20]

条件存数指令:保存寄存器的值,如果执行成功将寄存器的值修改为1,否则修改为0。

示例:

sc  $s1,20($s2)      含义:Memory[$s2+20]=$s1,($s1=0或1)

顺序地使用这两条指令,如果ll指令所指定的锁单元的内容在sc指令执行前已经被改变,sc指令执行失败

 

实现存储器单元的原子交换的指令序列:(存储器单元的地址由$s1中的值指出,寄存器$s4)

again:    add $t0,$zero,$s4
        ll    $t1,0($s1)
        sc    $t0,0($s1)
        beq   $t0,$zero,again
        add   $s4,$zero,$t1

解析:执行第一行:寄存器s4中保存的值赋值给寄存器t0中

          执行第二行:t1中保存锁单元原始内容A

          执行第三行:执行sc指令,如果在ll和sc之间任何时候有处理器插入,并修改了锁单元的值,t0置为0,条件存数指令执行失败,否则条件存数指令执行成功,t0置为1,保存$s4中的值在锁单元之中

          如果t0=1

          跳过第四行执行第五行,将A保存在寄存器$s4中,从而实现了寄存器$s4中的值和存储器中的值A的互相交换。

          如果t0为0,引起指令序列重新执行。

         

 

 

 

 

          

          

<think>好的,我需要帮助用户在SQL查询中使用WHERE NOT条件来排除特定据。首先,我得回想一下相关的SQL语法操作符。用户提到了WHERE NOT,可能涉及NOT与IN、BETWEEN、LIKE、EXISTS等的结合使用。根据引用[4],NOT操作符可以与其他操作符结合使用,所以应该举几个例子说明这些情况。 用户可能不太熟悉具体的语法结构,所以需要分步骤讲解。比如,使用NOT IN来排除特定值,或者NOT LIKE来排除匹配模式的据。同时,引用[2]提到用户在链接查询时遇到脏据,可能需要排除某些条件的记录,所以结合实例说明如何用WHERE NOT排除这些据。 还要考虑子查询的情况,比如使用NOT EXISTS。根据引用[3],EXISTS子句只关心是否在行,不关心具体据,所以可以举例如何用NOT EXISTS来排除相关记录。此外,引用[5]中的例子展示了基本的WHERE条件使用,可以在此基础上扩展NOT的用法。 需要注意语法的正确性,比如在NOT IN后面跟子查询时的括号位置,或者在NOT LIKE中使用通配符的正确方式。还要提醒用户注意性能问题,比如使用NOT IN时子查询返回的据量过大可能会影响效率,这时候可能需要优化或使用其他方法如LEFT JOIN + IS NULL。 最后,总结一下常见的应用场景,并确保回答结构清晰,步骤明确。同时,生成相关问题,帮助用户进一步学习,比如优化方法或性能分析,这样他们可以深入了解更多相关内容。</think>在SQL查询中使用$WHERE\ NOT$条件排除据时,可以通过以下方法实现: ### 一、基础语法结构 ```sql SELECT 列名 FROM 表名 WHERE NOT 条件表达式; ``` 这种语法会排除满足条件表达式的记录[^4]。 ### 二、具体应用场景 #### 1. 排除特定值 ```sql SELECT * FROM employees WHERE NOT department_id IN (2,5); ``` 该语句将排除部门编号为25的员工记录。 #### 2. 排除模糊匹配 ```sql SELECT product_name FROM products WHERE NOT product_name LIKE '%测试%'; ``` 排除产品名称包含"测试"的记录,通配符%表示任意字符。 #### 3. 排除范围值 ```sql SELECT order_id FROM orders WHERE NOT order_date BETWEEN '2023-01-01' AND '2023-03-31'; ``` 排除2023年第一季度的订单记录。 ### 三、高级用法 #### 1. 结合子查询 ```sql SELECT customer_id FROM orders WHERE NOT EXISTS ( SELECT 1 FROM returns WHERE returns.order_id = orders.order_id ); ``` 通过子查询排除在退货记录的订单[^3]。 #### 2. 多条件组合 ```sql SELECT * FROM inventory WHERE NOT (stock_quantity < 10 OR expiry_date < CURDATE()); ``` 使用括号组合多个排除条件,排除库不足10件或已过期的商品。 ### 四、性能建议 1. 对排除字段建立索引 2. 使用$EXISTS$代替$IN$时可提升大表查询效率[^3] 3. 避免在$NOT LIKE$中使用前导通配符(如$'%value'$)
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值