java.util.concurrent.LinkedBlockingQueue
为什么head
和tail
引用为非volatile
?
另一个帖子可能无法看到一个帖子中head
或tail
的任何更改,这会导致问题吗?
答案 0 :(得分:8)
head
和tail
将putLock
或takeLock
保护volatile
和volatile
。只要您进行适当的同步,您就不需要将字段声明为$(document).ready(function(){
$('.fabric').on('change',function(){
var fabricID = $(this).val();
console.log("fabric id_price is " + fabricID); //debugging
if(fabricID){
$.ajax({
type:'GET',
url:'cart_functions.php',
dataType: 'json',
data: {
fabric_id: fabricID
},
success:function(html){
$('.icms' + id).text(data.val);
}
});
//closing tags
$('.size').on('change',function(){
var sizeID = $(this).val();
if(sizeID){
$.ajax({
type:'GET',
url:'cart_functions.php',
dataType: 'json',
data:{
size_id: sizeID
},
success:function(html){
$('.icms' + id).text(data.val);
}
});
//closing tags
。
所以,回答你的问题。如果字段正确同步(它们是),则字段不需要<?php header('Content-Type: application/json');
include_once '../incluedes/conn_cms.php';
if(isset($_GET["size_id"],$_GET["fabric_id"])){
$size_id=$_GET["size_id"] ;
$fabric_id=$_GET["fabric_id"] ;
$query3 =" SELECT * FROM valores_almofadas
WHERE size='$size_id'
AND price_id ='$fabric_id'";
$result = mysqli_query($conn,$query3);
while($rows = mysqli_fetch_assoc($result)){
if($_SESSION['estado'] == 'SP'){
$ICMS = $rows['icms_7'];
}else{
$ICMS = $rows['icms_12'];
}
$_SESSION['icms']=$ICMS;
} echo json_encode($_SESSION['icms']);
}
?>
。
如果您发现有一部分代码存在疑问,请告诉我,否则我找不到任何需要变动的原因。
答案 1 :(得分:0)
简短回答:不,它不会导致可见性问题。
答案很长:它已被阻止,即在听到实施时它有某种<?xml version="1.0" encoding="utf-8" ?>
<MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms"
prism:ViewModelLocator.AutowireViewModel="True"
xmlns:local="clr-namespace:PrismMasterDetailSample.Views;assembly=PrismMasterDetailSample"
x:Class="PrismMasterDetailSample.Views.PMasterDetailPage">
<MasterDetailPage.Master Title="Menu">
<!--<local:MenuPage /> <========== does not work -->
<ContentPage Title="Default">
<StackLayout>
<Button Text="About" Command="{Binding NavigateCommand}" CommandParameter="MyNavigationPage/ViewA?id=A" />
</StackLayout>
</ContentPage>
</MasterDetailPage.Master>
<MasterDetailPage.Detail>
<NavigationPage>
<x:Arguments>
<local:PTabbedPage />
</x:Arguments>
</NavigationPage>
</MasterDetailPage.Detail>
</MasterDetailPage>
块。您可以通过using Xamarin.Forms;
namespace PrismMasterDetailSample.Views
{
public partial class PMasterDetailPage : MasterDetailPage
{
public PMasterDetailPage()
{
InitializeComponent();
}
}
}
块传播变量更改。
答案 2 :(得分:0)
java.util.concurrent.LinkedBlockingQueue有头尾 引用为非易失性
首先,volatile
是一种同步技术,但不是唯一的技术 - 其他同步技术是显式锁定,因此volatile
并非始终是强制性的,只要锁定即可处理字段同步。正如John Vint的回答所解释的那样,这里使用了这两个锁。
其次,您通常不会将volatile
视为参考类型。它通常用于原始类型,请参阅此another SO question以获得更多解释 - 这两个答案都很棒。
同样refer this question看到仅仅声明引用类型为volatile
有时是不够的,并且仍然可能产生不正确的结果,因为对于引用类型通常很重要的是引用类型字段的非陈旧值而不是实际参考本身。对于所有线程正确可见的非陈旧引用可能具有不同线程中的基础对象的陈旧字段值。